如何编辑Git";添加补丁";在选择性登台过程中的大块头/差异/线路?

如何编辑Git";添加补丁";在选择性登台过程中的大块头/差异/线路?,git,commit,patch,split,git-add,Git,Commit,Patch,Split,Git Add,我有一个源文件,其中添加了两个功能。为了允许樱桃采摘,我想将其分为两个阶段:每个功能一个阶段。到目前为止,在类似的情况下,使用gitadd-p提交一个特性,同时将本地文件保留在最后阶段,这对我很有用 然而,我现在的问题是,git add-p想要制作一个包含对这两个特性的编辑的大块头。即使编辑在单独的行上,s(用于“拆分”)也不再希望将大块肉拆分成更小的块 简而言之:我无法用这种方式区分这两个特性的变化。是否有一种方法可以手动编辑补丁,例如使用vi,而不实际更改原始文件 您可以在git add-p

我有一个源文件,其中添加了两个功能。为了允许樱桃采摘,我想将其分为两个阶段:每个功能一个阶段。到目前为止,在类似的情况下,使用
gitadd-p
提交一个特性,同时将本地文件保留在最后阶段,这对我很有用

然而,我现在的问题是,
git add-p
想要制作一个包含对这两个特性的编辑的大块头。即使编辑在单独的行上,
s
(用于“拆分”)也不再希望将大块肉拆分成更小的块


简而言之:我无法用这种方式区分这两个特性的变化。是否有一种方法可以手动编辑补丁,例如使用vi,而不实际更改原始文件

您可以在
git add-p
过程中按
e
编辑修补程序。它不会影响原始文件。

正如Alan所说,在
git add-p
期间按
e
(而不是
s
)编辑补丁。这将启动你的编辑器和补丁块,以便你可以手动编辑它。文本中有一些注释解释了如何正确地放弃修改,这其实很简单


完成后,请注意,您可以通过执行
git stash--keep index
仅使用刚刚添加的更改来测试它。您没有添加到索引中的更改将被隐藏,您现在可以自由地测试即将提交的更改。完成后,只需
git stash pop
git stash apply
即可恢复其他更改。

正如其他人所说,您可以使用
e
编辑要拆分的帅哥

要仅添加大块的一部分,可以从要拆分的更改中删除行

+Line 1
+Line 2
+Line 3
假设您希望在一次提交中保留第1行和第3行,在另一次提交中保留第2行。您只需删除第2行:

+Line 1
+Line 3

这将把1号线和3号线放在你的中转区。第2行仍将被索引,但不会被分段。

我通常从@Dan的回答中描述的
git stash pop
中获得合并冲突。有关避免冲突的解决方案,请参阅。

有一些Git GUI,可以让您选择要暂存的单独行,允许您从命令行拆分通常无法使用常规的
Git add--patch
的行

两个这样的GUI是:


  • 我的部分问题是,我可能想不出合适的术语来在谷歌上搜索。你可以在.git上找到手动编辑补丁程序的详细说明。git回复
    Huh(e)?
    。也许我的版本有点旧了?(虽然我只使用了2周,而且是CentOS的官方港口…)更正,
    git add-I
    的错误阶段。在提示如何处理这个大块头时,git只是忽略了我的“e”。“e”什么都不做。git——版本是1.5.5.6。这是不是太旧了?虽然我的版本只有8个月,比较git add的手册页,显然是。。。但这是关于……的最新版本:(Sheesh显然是在git 1.6.0()中添加了对“e”的支持……如果您发现自己经常使用
    git stash——keep index
    git stash-k
    也会这样做,并为您节省一些时间。