如何在交互式 rebase 过程中使用 git add --patch 命令?

6
我想要回去并移除两个提交之前的提交中的一些部分。我希望我可以使用 git rebase -i HEAD^^ 命令,编辑提交,然后在文件上使用 git add --patch <file>。但是,在重新设置时,git reset HEAD <file> 似乎无法工作,因为当我尝试使用 git add --patch <file> 时,它显示没有更改。
2个回答

5
问题在于,在交互式变基期间,HEAD并不指向前一个提交,因此git reset HEAD没有任何作用。
相反,使用git log找到前一个提交的哈希值,然后运行git reset <hash> <file>,接着运行git add --patch <file>
最后可以运行git checkout -- <file>来丢弃其他更改。

这个问题/答案没有得到更多的投票,你感到惊讶吗? - abbood
HEAD 永远不指向上一个提交,而总是指向最新的提交。使用修订哈希值可以工作,但并非必要。 - Daniel Böhmer

1
在变基期间,HEAD指向已添加到基础上的最新提交。因此,在两个变基操作之间执行git reset head没有任何作用。
您需要使用git reset HEAD^将其重置为前一个提交,然后(交互式地)添加所需更改。
$ git rebase -i ... # change a commit to "edit"
$ git reset HEAD^
$ git add --patch
$ git commit

可能需要放弃所有未提交的更改:
$ git checkout .

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接