Git反向合并提交并将master移回上一次提交

时间:2016-12-31 07:43:00

标签: git bitbucket sourcetree

我一直面临有关我的主分支的一些问题。我不小心把一些提交到了我的主分支,这些分支真的很旧。

现在我希望我的master和source返回到之前的提交(在图片中用蓝色突出显示),然后丢弃源和历史记录之后的所有其他提交,以便我可以在此之后推送我的新提交。我正在使用bitbucketSourceTree

你会怎么做?

enter image description here

1 个答案:

答案 0 :(得分:1)

最好创建一个新的提交,这将是旧的预订'的确切图像。之一:

首先:

 git checkout master
 git branch tmp                    # let's mark the current master (with wrong commit)

然后:

 git reset --hard <SHA1 'Booking'> # reset worktree and index of master
                                   # to Booking content
 git reset tmp                     # reset master HEAD and index to its original position 
                                   # (but keep working tree of Booking)

现在工作树代表了正确的内容:

 git add .
 git commit -m "restore Booking"
 git push

那样,没有filter-branch(会重写历史记录),没有revert(当涉及合并时可能会很复杂)。

要详细了解&#34;重置魔法&#34;,请阅读&#34; Reset Demystified&#34;

第一个reset --hard恢复正确的内容(但也会移动HEAD并重置索引)

https://git-scm.com/images/reset/reset-hard.png

第二个reset (--mixed)会将HEAD恢复到原来的位置,并且还会恢复索引。但会使工作树不受影响

enter image description here

这样,master索引与工作树之间存在差异,工作树代表旧提交的内容。
添加和提交足以在当前master之上使用旧提交内容创建新提交。