将git提交分成几个提交

时间:2011-08-08 20:02:04

标签: git

我在一段代码中修复了两个错误,它修改了常见文件。例如,错误修复1修改了文件A,B,C和错误修复2修改了B,C和D.我在一次提交中有所有更改。出于代码审查的目的,我需要将更改拆分为两个提交(实际上是两个分支)。

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

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

2 个答案:

答案 0 :(得分:5)

如果提交是您的最后一次提交,这是一个解决方案。

  1. 使用修复程序检出分支

    git checkout fix
    
  2. 重置回修复之前,但保留工作目录中的更改

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

    git checkout -b fix-1
    
  4. 添加/提交修复程序1修复程序

    git add -p
    git commit
    
  5. 存储剩余的更改

    git stash
    
  6. checkout / create branch for fix-2

    git checkout -b fix-1
    
  7. 弹出隐藏的更改

    git stash pop
    
  8. 提交/添加

    git commit -a
    

答案 1 :(得分:3)

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

我认为这是在git rebase下的SPLITTING COMMITS手册中。