我刚刚创建了一大段代码,我想将其分成几个不同的提交。
所以我可以逐个地暂存相关部分,提交,暂存,提交……直到所有更改都被提交。
缺少的部分是我如何测试是否正确拆分了提交。
比如说,那些在暂存区域中的部分至少能编译通过吗?
为了做到这一点,我必须以某种方式使我的工作树与索引(暂存区)同步,同时又不会丢失待提交的更改。
什么是正确的方法?
什么是最快的方法?
更新:
如何使用Magit实现?
你可以用以下方式实现:
$ git branch task1 # first set of commit to do
当您缓慢向索引中添加某些内容时,中间分支可以记录一些中间提交,这可能会很有用。
然后尝试一个交互式会话以添加您想要的内容:
$ git add -i
添加任何时间都可以检查您添加的内容:
$ git stash --keep-index
git commit
提交您当前的工作。如果task1
尚未完成,请使用git stash pop
恢复完整的工作树并重复上述步骤。一旦task1
完成,您可以删除所有'task1
'提交记录, 然后将所有工作合并到主分支中:$ git checkout master
$ git merge task1
$ git branch -D task1 # no need for that intermediate branch
这是我使用的 magit 方式:
编写测试以检查您的提交是否良好。如果需要进行任何更改,请在提交消息屏幕中提交之前按 Ctrl-C Ctrl-A 以重复操作。这将修改(完善)您最后一次提交,而不是创建新的提交。
请注意,如果您后来发现某些代码应该修改在您之前完成的提交之前,您应该将代码单独提交(带有临时摘要),然后通过“L”访问日志屏幕将它们合并到正确的提交中,然后将指针指向您想要压缩的两个提交之前,并按“E”启动“git rebase -i”会话。 重新排序提交,以便临时摘要成为目标提交的“修复”。退出缓冲区,TADA。一切都完成了。
git-rebase -i
)是我真正喜欢使用Git的事情之一,我经常这样做。它使您能够精心制作提交,以便它们有意义并且仅包含相关更改。 - Dan Mouldinggit add -p
而不是git add -i
。 - Erik Kaplun