【问题标题】:Break up multiple changes into separate commits with git?使用 git 将多个更改分解为单独的提交?
【发布时间】:2011-06-24 07:48:47
【问题描述】:

如果我对一个大文件进行了多组更改,是否可以使用 git 将它们拆分为单独的提交?

【问题讨论】:

  • 此外,尚不清楚更改是否已提交。如果他们已经在多个提交中提交,rebase --interactive 是要走的路。如果没有,git add --patch 是您应该考虑的选项之一。

标签: git


【解决方案1】:

您需要git add --patch (documentation),这将允许您选择对阶段进行哪些更改。

【讨论】:

  • 为什么投反对票? git add -i 如果您只想选择大块头,那就过分了,因为您将从 -i 菜单中选择的第一个选项是“p”(或 5),因此您不妨直接跳到它 --补丁。
  • 真的,又一次没有解释的反对票?如果您认为 git add --patch 有问题,请提供解释原因。
  • 我认为反对票(不是来自我!)来自已经承诺的人,而这个答案将不起作用。该问题并未说明更改是否已提交。
  • 这里的缩写是git add -p,它允许我们选择要上演的大块
  • @mikemaccana 问题并没有说文件已提交。我更新了这个答案。
【解决方案2】:

是的,您可以 -- 使用 git add -i 来选择要为每次提交暂存的数据块。您可以通过运行git help add 并滚动到“交互模式”来获取文档。

【讨论】:

    【解决方案3】:

    Williams answer 完全有效。但有时用手做事情更容易。例如,如果您在提交之前所做的更改之前不小心用大量文件更新了某个第三方库。使用git add -p(与--patch 相同),您需要浏览所有这些文件。因此,在这种情况下,只暂存您要提交的文件并使用所有其他更改进行第二次提交会更方便:

    > git add /path/to/your/file.txt
    > git commit -m "my commit message"
    [master a0c5ea6] my commit message
    1 file changed, 2 insertions(+), 1 deletion(-)
    > git add --all
    > git commit -m "updated library xyz"
    

    【讨论】:

    • 实际上,git add -p 允许您在命令行中选择特定文件,并且在交互式会话中您可以使用g 跳转到特定块,或者搜索匹配正则表达式的块使用/add -p 的重点是从文件中选择大块,但是这个提议的解决方案需要添加整个文件,这不是 OP 想要的。
    【解决方案4】:

    我经常使用的另一个选项只是因为我忘记了patch 选项:):

    假设您已经更新了文件:aaa.txtbbb.txtccc.txt,并且您想在第一次提交中 push aaa.txt 文件,然后在第二次提交中 bbb.txtccc.txt

    step 1:
    --------------------
    git add aaa.txt
    git commit -m "Added first file"
    git stash
    git push
    
    step 2:
    --------------------
    git stash pop
    git add -A
    git commit -m "Added the rest of the modified data"
    git push
    

    可能有点冗长,但在我看来,它提供了更多控制权。

    干杯!

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 2022-06-23
      • 2022-07-21
      • 2011-01-08
      • 2015-01-22
      • 2022-08-24
      • 2015-05-10
      相关资源
      最近更新 更多