在Git中,将未提交的更改“挑选”到单个文件的最简单方法是什么?

9
如果在Git中,我有一堆未提交的更改,只针对一个文件,那么最简单的方法是如何选择性地挑选和选择这些更改呢?
我的当前方法是"git diff"文件,然后手动查看差异以及实际文件。如果我想恢复旧代码的部分内容,我可以从差异中复制并粘贴到文件中。
在某些情况下,如果能够查看和编辑单个文件中的更改,那将会更加容易。例如,是否有一个Git命令可以将带有更改的工作文件转换为类似于冲突解决的格式 - 即在未提交更改周围放置"<<<<"符号?这样一来,就可以挑选和选择更改,而无需从一个文件中复制和粘贴到另一个文件中。
由于这不是三方(合并)情况,我不确定如何完成此操作。相反,它是一个双向情况,只针对一个文件进行一组更改(因此没有冲突)。谢谢。

您可以使用“add”、“stage”(与“add”相同)、“checkout”、“reset”和“stash”来有选择地选择补丁。每个选项都需要一个“-p”选项。(截至1.6.6版本) - William Pursell
谢谢,William。是的,在我的特定情况下,使用git-checkout时加上-p比使用git-add更方便。 - cjerdonek
2个回答

11

您可以通过 git add --patch 来选择添加哪些 hunk 到提交中。这将要求您针对文件中每个 hunk 的更改决定是否添加该 changeset。如果某个特定的 hunk 对您来说太大了,您可以进一步分割它。还有另一个选项是 --interactive,它可以让您与多个文件一起处理。

了解更多信息,请参阅git-add手册页或从此Google搜索结果中查看这篇文章。


谢谢,Alok和大家。我已经尝试过了,这绝对比我以前做的要容易。然而,它仍然似乎不如解决冲突的过程方便。看起来像这样添加应该至少和合并一样容易。我仍然想知道是否有一种方法可以“欺骗”Git创建冲突情况,其中“<<<<”行可以用于diff格式:+/-/。 - cjerdonek
我同意。如果有一种方法可以使用现有的许多合并工具来选择要暂存的块,那么这将是对当前命令行界面的巨大改进,因为你不必不断地回应文本提示。 - davr

1
除了 git add --patch 之外,还有 git add -i:你可以将其视为 git add --patch 的一层。

关于 git add --patchgit add -i 的教程。


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