Git Diff - 如何撤销选定的行或块

59
在 Git GUI 中,我可以选择差异的部分,然后只暂存那些行或块。如何做相反的操作,即回滚文件中更改的行。通常这些都是意外的空格更改,我只想还原它们但仍然暂存 / 提交同一文件的其他部分。

git 交互式添加,我相信或 https://dev59.com/U3NA5IYBdhLWcg3wH6AW - Luke Hutton
那是相反的。它会暂存更改,但之后你必须还原文件。 - Kenoyer130
https://dev59.com/zXI-5IYBdhLWcg3wMFIf - Josh Lee
问题的措辞与问题的标题不符。Leif的答案实际上回答了标题中的问题。 - mattgately
5个回答

106

使用 git add -p 命令暂存您想要提交的部分,然后舍弃(git checkout -- 文件名)未暂存的更改。

Git 1.6.5+ 的更新

从版本 1.6.5 开始,Git 学会了使用 -p/--patch 标志来检出。您可以使用 git checkout -p -- 文件名 一步舍弃不需要的代码块。

来自文档的说明:

在<tree-ish>(或索引,如果未指定)和工作树之间的差异中交互地选择补丁。然后将所选的补丁反向应用于工作树(如果指定了<tree-ish>,则还应用于索引)。

这意味着您可以使用 git checkout -p 来有选择地舍弃当前工作树中的编辑内容。


使用git add -p HEAD~1命令可以交互地撤销两个提交之前的代码块。 - Sandip Bhattacharya

17

在 Git Gui 中,

  1. 将包含不想要的更改的整个文件暂存
  2. 取消暂存您想还原的行/块
  3. 在“未暂存的更改”窗格中选择该文件并使用“提交->撤销更改”来撤消该文件的所有(未暂存的)更改

4

4

我使用git stash -p来实现这个目的。它的副作用是创建一个存储了从工作树中删除的更改的stash,有时可以快速恢复它们。


--patch 是一个有用的选项。 - DawnSong

4
对于Git Gui: 首先,点击Rescan以扫描修改文件。接下来,点击文件名左侧的图标将所有修改内容暂存以提交。然后,右键单击调试行并选择从提交中取消暂存该行。
以上信息来自:http://nathanj.github.com/gitguide/tour.html

6
这实际上没有撤销文件中的任何内容。 - Leif Gruenwoldt

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