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