【发布时间】:2010-04-17 14:53:09
【问题描述】:
我刚刚创建了一大段代码,我想在几个单独的提交中提交。
所以我可以暂存相关部分、提交、暂存、提交……等等,直到我提交所有更改。
缺少的部分是如何测试我是否正确拆分提交。
IE。暂存区的部分是否至少编译?
为此,我必须以某种方式使我的工作树与索引(暂存区)同步,而不会丢失稍后提交的更改。
正确的方法是什么?
最快的方法是什么?
更新:
用magit怎么做?
【问题讨论】:
我刚刚创建了一大段代码,我想在几个单独的提交中提交。
所以我可以暂存相关部分、提交、暂存、提交……等等,直到我提交所有更改。
缺少的部分是如何测试我是否正确拆分提交。
IE。暂存区的部分是否至少编译?
为此,我必须以某种方式使我的工作树与索引(暂存区)同步,而不会丢失稍后提交的更改。
正确的方法是什么?
最快的方法是什么?
更新:
用magit怎么做?
【问题讨论】:
你可以这样做:
$ 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,并合并 master 中的所有工作:
$ git checkout master
$ git merge task1
$ git branch -D task1 # no need for that intermediate branch
如果您想保留一些重要的 task1 提交的历史记录,您可以先将 task1 重新设置在 master 之上,然后将 master 合并到 task1 中(快进)
最后,如果您的 stash 仍然包含一些正在进行的工作,请重复 task2 的所有过程。
【讨论】:
git add -p 通常是您需要的,而不是 git add -i。
这是我使用的一种魔法方式:
进行测试以检查您的提交是否良好。如果必须进行任何更改,请像以前一样重做,但在提交消息的屏幕上提交之前按 Ctrl-C Ctrl-A。这将修改(完成)您的上一次提交,而不是创建一个新的提交。
请注意,如果您稍后发现某些代码应该修改您上次完成之前的提交,您应该自行提交代码(带有临时摘要),并将它们折叠到正确的提交中谢谢到“L”以访问日志屏幕,然后在您想要压缩的两个提交之前指向您的指针,然后按“E”启动“git rebase -i”会话。 重新排序提交,以便临时摘要“修复”目标提交。退出缓冲区和 TADA。一切都完成了。
【讨论】: