我一直面临有关我的主分支的一些问题。我不小心把一些提交到了我的主分支,这些分支真的很旧。
现在我希望我的master和source返回到之前的提交(在图片中用蓝色突出显示),然后丢弃源和历史记录之后的所有其他提交,以便我可以在此之后推送我的新提交。我正在使用bitbucket
和SourceTree
。
你会怎么做?
答案 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并重置索引)
第二个reset (--mixed)
会将HEAD恢复到原来的位置,并且还会恢复索引。但会使工作树不受影响。
这样,master
索引与工作树之间存在差异,工作树代表旧提交的内容。
添加和提交足以在当前master
之上使用旧提交内容创建新提交。