我有一个Git存储库,看起来像这样:
A <- B <- C <- D <- HEAD
我希望分支的头部指向A,即,我希望B、C、D和head消失,我希望头部与A同义。
听起来我可以尝试重新设置基础(不适用,因为我已经在两者之间进行了更改),也可以恢复。但如何恢复多次提交?我一次回复一个吗?订单重要吗?
我有一个Git存储库,看起来像这样:
A <- B <- C <- D <- HEAD
我希望分支的头部指向A,即,我希望B、C、D和head消失,我希望头部与A同义。
听起来我可以尝试重新设置基础(不适用,因为我已经在两者之间进行了更改),也可以恢复。但如何恢复多次提交?我一次回复一个吗?订单重要吗?
当前回答
git reset --hard a
git reset --mixed d
git commit
这将同时对所有人起到恢复作用。给出一个好的承诺信息。
其他回答
在我看来,一个非常简单和干净的方法可以是:
回到A
git checkout -f A
将master的头指向当前状态
git symbolic-ref HEAD refs/heads/master
save
git commit
为此,您只需使用revert命令,指定要恢复的提交范围。
考虑到您的示例,您必须这样做(假设您在分支“master”上):
git revert master~3..master
或git revert B…D或git return D C B
这将使用B、C和D的反向提交在本地创建一个新的提交(这意味着它将撤消这些提交带来的更改):
A <- B <- C <- D <- BCD' <- HEAD
如果你
合并提交和您无法恢复,并且你不介意粉碎你要还原的历史,
那么你可以
git reset --soft HEAD~(number of commits you'd like to revert)
git commit -m "The stuff you didn't like."
git log
# copy the hash of your last commit
git revert <hash of your last (squashed) commit>
然后,当您想要推送更改时,请记住使用-f标志,因为您修改了历史记录
git push <your fork> <your branch> -f
这些都不适用于我,所以我有三次提交要恢复(最后三次提交),所以我做到了:
git revert HEAD
git revert HEAD~2
git revert HEAD~4
git rebase -i HEAD~3 # pick, squash, squash
工作起来很有魅力:)
我觉得有用的干净方式
git revert --no-commit HEAD~3..
git commit -m "your message regarding reverting the multiple commits"
此命令仅使用一次提交来还原最后3次提交。
也不重写历史,因此不需要强制推送。
这个帮助创建范围。意思是HEAD~3..与HEAD~3..HEAD相同