11

如何撤消一段时间内应用到文件的部分更改。我有以下提交,A并且B在“file.txt”之间发生了意外更改

...--A--B--...

我有一个文件的差异补丁,file.txt-B-A.patch其中恢复了所有更改。但是我只想撤消中的某些更改file.txt就像在合并冲突中手动选择更改一样。有没有办法在不修改补丁文件的情况下做到这一点?

4

2 回答 2

11

许多 git 命令可以-p选择(“patch”)或-i(“interactive”)部分地做某事。对于任意差异,我不认为这是受支持的,但是您可以应用补丁,然后使用 选择性地撤消未暂存的更改git checkout -p -- <path(s)>,例如,git checkout -p -- .如果您处于 repo 的顶层。

于 2013-03-21T14:02:28.430 回答
10

还有另一种完全不需要补丁文件的方法。

问题发生在从AB,所以首先恢复更改B但不要自动提交。

$ git revert --no-commit <commit hash of B>

将要进行的更改git revert是分阶段进行的。取消舞台。

$ git reset HEAD

接下来,以交互方式浏览file.txt并仅暂存您想要保留的更改。

$ git add --patch file.txt

现在只暂存您选择的还原。提交他们。

$ git commit

最后,清理git revert.

$ git reset --hard
于 2013-03-21T15:33:59.523 回答