【问题标题】:Git Diff - How do I revert selected lines or chunksGit Diff - 如何恢复选定的行或块
【发布时间】:2012-06-05 06:36:11
【问题描述】:

在 Git GUI 中,我可以选择 diff 的一部分并仅暂存那些行或块。我将如何做相反的事情,如回滚文件中更改的行。通常这些是我只想恢复但仍暂存/提交同一文件的其他部分的意外空白更改。

【问题讨论】:

标签: git diff git-gui


【解决方案1】:

在 Git Gui 中,

  1. 暂存包含不需要的更改的整个文件
  2. 取消暂存您想要还原的行/大块
  3. Unstaged Changes 窗格中选择文件并Commit->Revert Changes 撤消对该文件的所有(未暂存)更改

【讨论】:

  • Props 用于回答标题中的问题,并使用git gui。很有帮助。
  • 谢谢你……它有效。然而 git gui 让我渴望在这方面进行 git 扩展。
【解决方案2】:

从 Git 2.24 开始,Git GUI 在上下文菜单中具有“Revert Hunk”和“Revert Line”选项,类似于 staging。您甚至可以“撤消上次还原”,这是一个很棒的补充。

这是添加此功能的提交: https://github.com/git/git/commit/62bd99934bb2b1a07f786fdf9b94d7b692768e30

【讨论】:

  • 是否有命令行版本可以恢复单个行?
  • @Skybuck 是的,git checkout -p -- filename 是。
  • 这与 git revert 有什么关系?和个别行?效果不好,也许以后在某些场景中可能会有用。
【解决方案3】:

我为此使用git stash -p。它的副作用是使用从工作树中删除的更改创建一个存储,这有时对快速恢复它们很有用。

【讨论】:

  • --patch 是一个有用的选项。
【解决方案4】:

使用 git add -p 暂存您想要的部分,然后丢弃 (git checkout -- filename) 未暂存的更改。

Git 1.6.5+ 更新

在 1.6.5 版本中,Git 学会了使用-p/--patch 标志进行结帐。您可以使用git checkout -p -- filename 一步丢弃块。

来自the docs

(或索引,如果未指定)和工作树之间的差异中以交互方式选择块。然后将选择的块反向应用于工作树(如果指定了 ,则为索引)。

这意味着您可以使用 git checkout -p 选择性地丢弃当前工作树中的编辑。

【讨论】:

  • 我知道问题是关于 Git Gui 的,但非常感谢您为命令行用户提供替代方案。使用简单。
  • 这对我们 CLI 用户来说是完美的。
【解决方案5】:

对于 Git Gui: 首先,单击重新扫描以扫描修改后的文件。接下来,单击文件名左侧的图标以暂存所有修改以进行提交。然后,右键单击调试行并选择 Unstage Line From Commit。

以上信息来自:http://nathanj.github.com/gitguide/tour.html

【讨论】:

  • 这实际上并没有还原文件中的任何内容。
猜你喜欢
  • 2016-06-24
  • 2012-03-18
  • 2020-09-06
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2012-09-09
相关资源
最近更新 更多