我如何"重新打开"git提交?

Pau*_*gar 5 git mercurial rebase

(注意,我不是在寻找答案git rebase -i)

在mercurial中,我可以通过将提交导入我的补丁队列来"重新打开"提交:

hg qimport tip
Run Code Online (Sandbox Code Playgroud)

该承诺在这个意义上是"开放",它就像我犯了它之前,我可以恢复,做hg diff,hg status等我如何做到这一点的混帐?

(我在网上找到的所有东西都建议git rebase -i然后选择编辑,但这是不同的,因为提交不是以同样的方式"打开".)

cor*_*ard 16

您只需将HEAD指针向上移动而不对工作副本进行任何更改:

git reset --soft HEAD^
Run Code Online (Sandbox Code Playgroud)

重置会移动指针,而soft选项指定它不应更改任何文件.默认值是混合的,这将重置您的索引,而硬选项实际上将删除自工作副本中的提交后的更改.

HEAD是一个"神奇的"git指针,它始终指向当前的ref(即工作副本的父级).插入符号(^)表示父符号.您可以重复使用它,例如HEAD ^^指的是最后一次提交的父级.

  • @PaulBiggar:避免丢失提交消息是修改而不是重置的一个很好的理由.但是,如果重置,仍可以间接恢复提交消息.`HEAD @ {1}`指的是先前签出的提交,如果你还没有做任何其他事情,那么将是重置前的提交.您可以使用`git commit -c HEAD @ {1}`将其提交消息用作起始位置.(如果从那时起你已经移动了HEAD,你可以使用`git reflog`在reflogs中找到更远的提交.) (3认同)