如何撤消一段时间内应用到文件的部分更改。我有以下提交,A
并且B
在“file.txt”之间发生了意外更改
...--A--B--...
我有一个文件的差异补丁,file.txt-B-A.patch
其中恢复了所有更改。但是我只想撤消中的某些更改,file.txt
就像在合并冲突中手动选择更改一样。有没有办法在不修改补丁文件的情况下做到这一点?
许多 git 命令可以-p
选择(“patch”)或-i
(“interactive”)部分地做某事。对于任意差异,我不认为这是受支持的,但是您可以应用补丁,然后使用 选择性地撤消未暂存的更改git checkout -p -- <path(s)>
,例如,git checkout -p -- .
如果您处于 repo 的顶层。
还有另一种完全不需要补丁文件的方法。
问题发生在从A
到B
,所以首先恢复更改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