我在一段代码中修复了两个错误,它修改了常见文件。例如,错误修复1修改了文件A,B,C和错误修复2修改了B,C和D.我在一次提交中有所有更改。出于代码审查的目的,我需要将更改拆分为两个提交(实际上是两个分支)。
我在想的是,从我当前的分支fix
,我创建了两个分支,如git branch fix-1 fix
和git branch fix-2 fix
。两个分支都有所有变化。现在,在分支fix-1
中,我想保留与修复1相关的更改,即文件A中的所有更改,以及文件B和C中的部分更改。是否可以在git中执行此操作?什么命令与此相关?
我知道在git add
中,我可以进行交互式添加,我可以选择要添加的代码,而不仅仅是文件级别。我可以在这里做类似的事吗?
答案 0 :(得分:5)
如果提交是您的最后一次提交,这是一个解决方案。
使用修复程序检出分支
git checkout fix
重置回修复之前,但保留工作目录中的更改
git reset HEAD^
为fix-1创建分支
git checkout -b fix-1
添加/提交修复程序1修复程序
git add -p
git commit
存储剩余的更改
git stash
checkout / create branch for fix-2
git checkout -b fix-1
弹出隐藏的更改
git stash pop
提交/添加
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
手册中。