我刚刚在几个单独的提交中创建了一大段代码 所以我可以暂存相关的部分,提交,阶段,提交......等等,直到我提交了所有更改。
缺少的部分是如何测试我是否正确分割提交。
即暂存区域中的部分是否至少编译?
为此,我必须以某种方式使我的工作树与索引(暂存区域)保持同步,而不会丢失稍后要提交的更改。
正确的方式是什么?
什么是最快的方式?
更新
如何用magit做到这一点?
答案 0 :(得分:16)
你可以用:
$ git branch task1 # first set of commit to do
当您向索引中缓慢添加一些内容时,中间分支可用于记录某些中间提交。
然后尝试interactive session for adding正是您想要的:
$ git add -i
如果您想要查看已添加的内容,请随时添加:
$ git stash --keep-index
如果它编译,git commit
您当前的工作,如果task1
尚未完成,请git stash pop
恢复完整工作树并重复。
完全task1
完成后,您可以trim all those 'task1
' commits,并将所有工作合并到主文件中:
$ git checkout master
$ git merge task1
$ git branch -D task1 # no need for that intermediate branch
如果您想保留一些重要task1
次提交的历史记录,您可以在task1
master
中合并task1
之前,先在master上重新task2
。向前)
最后,如果您的藏匿处仍包含一些正在进行的工作,请重复{{1}}的所有过程。
答案 1 :(得分:0)
这是我使用的一种魔术方式:
进行测试以检查您的提交是否良好。如果必须进行任何更改,请像以前一样重做,但在提交消息的屏幕中提交前按Ctrl-C Ctrl-A。这将修改(完成)您上次提交而不是创建新提交。
请注意,如果您稍后想到某些代码应该修改最后一次提交之前的提交,您应该自己提交代码(使用临时摘要),并将它们折叠到正确的提交中要“L”进入日志屏幕,然后在你想要挤压之前指向你的指针,然后按“E”启动“git rebase -i”会话。 重新排序提交,以便临时摘要“修复”目标提交。退出缓冲区和TADA。一切都完成了。