Git:Stage into Commit,什么是正确的工作流程?

时间:2010-04-17 14:53:10

标签: git commit split staging

我刚刚在几个单独的提交中创建了一大段代码 所以我可以暂存相关的部分,提交,阶段,提交......等等,直到我提交了所有更改。

缺少的部分是如何测试我是否正确分割提交。
即暂存区域中的部分是否至少编译?

为此,我必须以某种方式使我的工作树与索引(暂存区域)保持同步,而不会丢失稍后要提交的更改。

正确的方式是什么?
什么是最快的方式?

更新
如何用magit做到这一点?

2 个答案:

答案 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)

这是我使用的一种魔术方式:

  • 使用magit“u”或“s”进行第一次提交的索引,以暂存或取消暂停hunk / files / region。 (这也可以用git gui完成)。一旦您的索引准备好提交:
  • 使用“c”提交,编写提交消息,按Ctrl-C Ctrl-C提交。
  • 用“z”存储,然后是<<输入>>,这将隐藏您的所有更改。要取回您的更改,您可以在指针位于正确的存储条目时使用“A”。

进行测试以检查您的提交是否良好。如果必须进行任何更改,请像以前一样重做,但在提交消息的屏幕中提交前按Ctrl-C Ctrl-A。这将修改(完成)您上次提交而不是创建新提交。

请注意,如果您稍后想到某些代码应该修改最后一次提交之前的提交,您应该自己提交代码(使用临时摘要),并将它们折叠到正确的提交中要“L”进入日志屏幕,然后在你想要挤压之前指向你的指针,然后按“E”启动“git rebase -i”会话。 重新排序提交,以便临时摘要“修复”目标提交。退出缓冲区和TADA。一切都完成了。