可以将同一文件中的更改拆分为git中的不同提交吗?

时间:2017-02-10 08:53:59

标签: git tortoisegit git-extensions

很抱歉,如果这个地方有重复,我在搜索解决方案时淹没了大量的技巧来改变提交消息(这对我没用)。

我有两组更改,应该是每次提交的一部分。不幸的是,我在早上开始了第二次变换,没有注意到我在前一天晚上忘记了第一次变换。

在大多数情况下,它们会影响不同的文件。但是,一个文件包含两个更改集的更改,如果在没有第二个更改集的情况下推送,则会中断构建。太糟糕了,我想在一个单独的分支上工作,直到功能。

可悲的是,当我注意到有一个包含更改的文件时,我已经已提交(未推送)第一个变更集并在其上创建了工作分支都。

有没有办法编辑我的提交,以便我可以提取影响变更集2的更改?

在Mercurial中,您可以通过

解开提交
  1. 将它们转换为补丁,
  2. 在文本编辑器中打开它们
  3. 在补丁文件之间移动差异行(如果您的Mercurial GUI当时未打开)。
  4. 当重新打开GUI时,补丁包含了它们应该的内容,可以最终确定并推送。

    这实际上是我的目标工作流程。 git有什么类似的东西吗?

    我正在使用的工具:Win10上的TortoiseGit和GitExtensions

    编辑:解决方案中建议的解决方案

    git checkout new_branch
    git reset -p HEAD~1
    git add -p
    ...
    git commit -m "my changeset 1"
    git add
    git commit -m "my changeset 2"
    git checkout old_branch
    git reset --hard <new_branch>~1
    

    在变更集1中我old_branch,在变更集2中为new_branch

    再次感谢!

1 个答案:

答案 0 :(得分:3)

使用git add -p有选择地暂存您计划提交的更改/数据。提交第一批后,您可能会留下第二组更改,在这种情况下,您可以正常添加文件并提交。

Git会询问您对每次提交的要求。输入&#39;?&#39;求助。按&#39;上演大块头和“大佬”从你的临时区域中排除大块头。

如果git没有选择足够精细的大块,当它询问你如何处理大块时,你可以按下&#39; e&#39;并且您的编辑器将打开,您可以选择要包含的块的哪些部分。

最近了解到这一点并且非常有用。