将git提交拆分为几个提交
我已经修复了一段代码中的两个bug,它修改了常见的文件。例如,bug fix 1修改了文件A、B、C,bug fix 2修改了文件B、C和D。为了进行代码审查,我需要将更改分成两个提交(实际上是两个分支) 我的想法是,从我当前的分支将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
fix
,我创建了两个分支,如git branch fix-1 fix
和git branch fix-2 fix
。两个分支都有所有更改。现在,在branchfix-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是要重新排序以提交目标提交的提交数。的可能重复项