我有一个本地及其相应的github回购.我有一些提交
A <- B <- C <- D
Run Code Online (Sandbox Code Playgroud)
A是最新的.
这是两个回购的情况.我想删除提交C,就好像它从未发生过一样.
所以应该是这样的 git log
A <- B <- D
Run Code Online (Sandbox Code Playgroud)
在两个回购.
我试过了git reset --soft <sha-commit-C>,现在卡住了.我看不到A, B.在做任何进一步的步骤之前,我想完全确定我知道我在做什么.
git reflog 给我 :
git reflog
73ea54d HEAD@{0}: reset: moving to 73ea54d8
a594699 HEAD@{1}: rebase -i (finish): returning to refs/heads/unique_ptr_release
a594699 HEAD@{2}: checkout: moving from unique_ptr_release to a594699fb6f7d85bc8
a594699 HEAD@{3}: checkout: moving from unique_ptr_release to unique_ptr_release
a594699 HEAD@{4}: commit (merge): Merge branch 'master' into unique_ptr_release
Run Code Online (Sandbox Code Playgroud)
HEAD@{4}是我的头在reset --soft命令之前.
我如何摆脱这种情况?
你正在寻找Git-rebase.
在您提交的情况下A-B-C-D,并想要删除C,请尝试:
git rebase -i HEAD~3
Run Code Online (Sandbox Code Playgroud)
它将通过编辑器显示最后3个提交(我的是vim),只需删除(在vim中dd)要删除的提交行,然后保存它(在vim中:wq).
完成,查看git log,您将看到C提交已被删除.
*不要忘记备份您的代码或.git文件夹.