Git撤消对文件的部分更改

cam*_*uni 7 git merge undo

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

...--A--B--...
Run Code Online (Sandbox Code Playgroud)

我有一个文件的差异补丁,file.txt-B-A.patch其中恢复所有更改.不过,我只是想撤销某些变化file.txt,很像一个合并冲突手工采摘的变化.有没有办法在不修改补丁文件的情况下这样做?

Rob*_*rek 8

还有另一种方法可以完全不需要补丁文件.

发生问题从去AB,所以先恢复在变化B,但是不要自动提交.

$ git revert --no-commit <commit hash of B>
Run Code Online (Sandbox Code Playgroud)

git revert可以做的改变是分阶段进行的.取消他们.

$ git reset HEAD
Run Code Online (Sandbox Code Playgroud)

接下来,交互式地浏览file.txt并仅进行您想要保留的更改.

$ git add --patch file.txt
Run Code Online (Sandbox Code Playgroud)

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

$ git commit
Run Code Online (Sandbox Code Playgroud)

最后,清理未上市的剩菜git revert.

$ git reset --hard
Run Code Online (Sandbox Code Playgroud)


Jan*_*ger 6

许多git命令都有-p选项("patch")或-i("interactive")来部分执行某些操作.对于任意差异我不认为这是支持的,但您可以应用补丁,然后使用git checkout -p -- <path(s)>,例如,git checkout -p -- .如果您处于回购的顶层,有选择地撤消未分阶段的更改.