我如何“重新打开”git提交?

时间:2011-11-04 16:21:17

标签: git mercurial rebase

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

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

hg qimport tip

提交是“开放的”,因为它就像我提交之前一样,我可以还原,执行hg diffhg status等。我如何在git中执行此操作?< / p>

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

4 个答案:

答案 0 :(得分:16)

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

git reset --soft HEAD^

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

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

答案 1 :(得分:2)

假设您尚未推送到远程存储库,git reset --soft HEAD^将“重新打开”您的上次提交,但会丢失您的提交消息。

答案 2 :(得分:2)

您可以使用git commit --amend获得相同的结果。

见Hg&amp;之间的comparison chart GIT中。

答案 3 :(得分:1)

Scott Chacon(精彩地)详细阐述了'git reset'命令:http://progit.org/2011/07/11/reset.html 不要犹豫,看看它。