如何在交互式补丁模式下撤消最后一次提交的部分内容并选择要撤消的部分?
当您在最后一次提交中意外地检入了几行太多的代码时,例如调试打印语句或编辑器为您执行的空格更改时,此功能将非常有用。
天真的方法是:
但这很烦人,因为它要求你事先指定文件,并且让你逐个重新添加所有的补丁(而不允许你只取消添加其中的一部分)。
当您在最后一次提交中意外地检入了几行太多的代码时,例如调试打印语句或编辑器为您执行的空格更改时,此功能将非常有用。
天真的方法是:
git commit --amend --interactive --patch
但是这似乎不起作用。也就是说,它只是让你进入编辑器进行重新措辞。
丑陋的方法是
git show HEAD~1:path/to/some/file > path/to-some/file
git add -up
git commit --amend
但这很烦人,因为它要求你事先指定文件,并且让你逐个重新添加所有的补丁(而不允许你只取消添加其中的一部分)。
git show | git apply -R
,然后结合使用git add --patch
或者git checkout --patch
可以帮助解决问题。虽然这种方法并不比重置再添加更好,但它取决于你想要做多少工作。 - cmbuckleygit commit --amend
只是一种谎言(在许多情况下很有用,但在本例中不是这样)。实际上,--amend
只是使新提交的父级与当前提交的父级相同。根据Git创建新提交的方式,它只需要做到这一点就足够了。 - torek