我需要回到一个好的配置,这意味着回过头几次提交和一次合并。
有人可以确认正确的步骤吗?或者让我知道这是否是正确的过程。
git checkout master
git revert commita, commitb, (merge happened between b&c), commit c
git push
...
由于
答案 0 :(得分:1)
有两个关键问题:
git branch backup_description
git reset --hard <sha-where-it-all-worked-well>
git push --force origin/master
git revert commita
git revert -m 1 mergecommit
git push
这也有帮助:
答案 1 :(得分:0)
如果您只是想回到最后几次提交,那么您只需要git reset --hard <commit-hash-before-commit-a>
(如果您这样做,请确保这些更改尚未推送到服务器)
但是如果你的提交a,b存在于当前头部以下某处,那么使用git revert <commit-hash-a> <commit-hash-b>
但是当你想要恢复合并提交时,通过合并两个提交(比如c和d)来进行更改。如果要还原分支上的commit c所做的更改,则必须使用git revert -m 1 <merge-commit-hash>
答案 2 :(得分:0)
让我们说为了简单起见,您希望提交的提交是“f8dec3”。那么您需要做的最简单的事情如下:
git branch savepoint
git reset --hard f8dec3
这会将当前分支的状态重置为该特定修订。在此之前,您将丢失所有提交。
您可以使用git log
命令确定要重置的提交的ID,或者最好使用tig之类的工具,通过可视化图表可以更轻松地推理git更改。
如果您发现有问题,那么您可以恢复错误:
git reset --hard savepoint
修复错误
如果您使用git reflog犯了错误,有一种很好的方法可以恢复硬重置。只需键入git reflog
并记下硬重置前您之前的提交ID。如果您在重置之前忘记保存分支的状态,这将特别有用(这实际上已经无数次地保存了我,并且使我不会因为使用git命令而感到害怕)。
如果您的远程跟踪分支具有您从硬重置恢复的提交,那么您将需要使用git push -f
进行强制推送。但是,在做这件事之前,请仔细考虑一下你是否做了正确的事情。