将git提交拆分为几个提交

将git提交拆分为几个提交,git,Git,我已经修复了一段代码中的两个bug,它修改了常见的文件。例如,bug fix 1修改了文件A、B、C,bug fix 2修改了文件B、C和D。为了进行代码审查,我需要将更改分成两个提交(实际上是两个分支) 我的想法是,从我当前的分支fix,我创建了两个分支,如git branch fix-1 fix和git branch fix-2 fix。两个分支都有所有更改。现在,在branchfix-1中,我只想保留与fix-1相关的更改,即文件A中的所有更改,以及文件B和C中的部分更改。是否可以在git

我已经修复了一段代码中的两个bug,它修改了常见的文件。例如,bug fix 1修改了文件A、B、C,bug fix 2修改了文件B、C和D。为了进行代码审查,我需要将更改分成两个提交(实际上是两个分支)

我的想法是,从我当前的分支
fix
,我创建了两个分支,如
git branch fix-1 fix
git branch fix-2 fix
。两个分支都有所有更改。现在,在branch
fix-1
中,我只想保留与fix-1相关的更改,即文件A中的所有更改,以及文件B和C中的部分更改。是否可以在git中执行?什么命令与此相关

我知道在
gitadd
中,我可以进行交互式添加,在这里我可以选择要添加的大块代码,而不仅仅是在文件级别。我能在这里做些类似的事情吗

从您所处的状态(两个分支,每个分支都有所有更改)进入每个分支并执行
git rebase-i fix^
并为
fix
提交选择“编辑”。然后,当它暂停编辑提交时,您将使用
git reset HEAD^
,它将丢弃提交,但将更改保留在工作树中。然后使用通常的
git add-p
策略将提交拆分为多个
git提交
,然后
git-rebase——继续


我想这是在git rebase手册的
拆分提交
下的
中。如果提交是您最后一次提交,这里有一个解决方案

  • 使用修复程序签出分支

    git checkout fix
    
  • 重置回修复前,但将更改保留在工作目录中

    git reset HEAD^
    
  • 为fix-1创建分支

    git checkout -b fix-1
    
  • 添加/提交修复-1修复

    git add -p
    git commit
    
  • 隐藏剩余的更改

    git stash
    
  • 签出/创建fix-2的分支

    git checkout -b fix-1
    
  • 拿出你藏起来的零钱

    git stash pop
    
  • 提交/添加它们

    git commit -a
    

  • 在做了
    git add-p
    之后,我做了
    git commit
    ,但在那之后,做
    git rebase--continue
    会导致/path/to/file1.txt:needs update/path/to/file2.txt:needs update工作树变脏,我留在
    (无分支)
    。我想不出在那之后该怎么办。我所做的是
    git stash
    ,它扔掉了更改,我回到了原来的分支。当我得到
    工作树时,
    git commit
    之后我应该做什么呢?
    是脏的。哦,对了,既然你不想所有的更改,你就要
    git reset--hard
    在你提交你想要的部分后放弃所有的工作副本编辑。谢谢Ben。这个解决方案工作得很好,但是上面Andy的解决方案更简单,我更了解正在发生的事情。每当git开始显示
    (无分支)
    ,我的理解就站不住脚了,这个解决方案涉及到进入
    (无分支)
    模式谢谢你提出这个解决方案。我也喜欢@Andy的答案,不过如果你在提交之前提交了额外的更改,那么你需要一个更像我的解决方案。同意。在我想要拆分的提交之后,我碰巧有任何提交。我认为第二个命令应该是
    git reset--mixed HEAD^
    。这个解决方案对我很有效。谢谢。更正:)已编辑以显示更正。当没有给出任何标志时,它将默认为--mixed。我将它与git rebase-I HEAD~X
    结合使用,以推进我想要拆分的提交。其中X是要重新排序以提交目标提交的提交数。的可能重复项