代码之家  ›  专栏  ›  技术社区  ›  bart

如何在选择性分级期间编辑git“添加补丁”hunks/diff/lines?

  •  23
  • bart  · 技术社区  · 15 年前

    我有一个源文件,其中添加了2个功能。为了允许挑选樱桃,我想分两个阶段提交:每个特性一个。直到现在,在类似的情况下,使用 git add -p 为我提供了很好的服务,在本地文件处于最后阶段时提交一个特性。

    但是,我现在有个问题 加特-P 想要准备一个包含两个功能编辑的Hunk。即使编辑是在单独的行上, s (对于“分裂”)不再想把大块分割成小块…

    简而言之:我不能用这种方式区分这两个功能的更改。是否有方法手动编辑补丁,例如使用vi,而不实际更改原始文件?

    5 回复  |  直到 11 年前
        1
  •  24
  •   Dan Moulding    15 年前

    如艾伦所说,按 e 而不是 s ) git add -p . 这将使用补丁块启动编辑器,以便您可以手动编辑它。文本中有一些注释解释了如何正确地放弃修改,实际上非常简单。

    完成后,请注意您可以测试它。 只有你刚添加的更改 通过做 git stash --keep-index . 改变你 没有 添加到索引将被隐藏起来,现在您可以自由测试即将提交的更改。完成后,简单地 git stash pop git stash apply 以取回其他更改。

        2
  •  6
  •   Kousha    15 年前

    就像别人说的,你可以用 e 编辑要拆分的Hunk。

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

    +Line 1
    +Line 2
    +Line 3
    

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

    +Line 1
    +Line 3
    

    这将把第1行和第3行放在集结区。第2行仍将被索引,但不进行分级。

        3
  •  5
  •   Alan Haggai Alavi    15 年前

    您可以按编辑补丁 e 在一个 git add -p . 它不会影响原始文件。

        4
  •  1
  •   user456814    11 年前

    有些git-gui允许您选择要分段的单独行,允许您拆分通常无法使用常规 git add --patch 从命令行。

    两个这样的gui是:

    1. SourceTree .
    2. Git Cola .
        5
  •  0
  •   Community pid    7 年前

    我通常从 git stash pop 在@dan的回答中描述。见 git stash and edited hunks 以避免冲突。