Git:进入 Commit 阶段,正确的工作流程是啥?
Posted
技术标签:
【中文标题】Git:进入 Commit 阶段,正确的工作流程是啥?【英文标题】:Git: Stage into Commit, what is the right workflow?Git:进入 Commit 阶段,正确的工作流程是什么? 【发布时间】:2010-04-17 14:53:09 【问题描述】:我刚刚创建了一大段代码,我想在几个单独的提交中提交。 所以我可以暂存相关部分、提交、暂存、提交……等等,直到我提交所有更改。
缺少的部分是如何测试我是否正确拆分提交。 IE。暂存区的部分是否至少编译?
为此,我必须以某种方式使我的工作树与索引(暂存区)同步,而不会丢失稍后提交的更改。
正确的方法是什么?最快的方法是什么?
更新: 用magit怎么做?
【问题讨论】:
【参考方案1】:你可以这样做:
$ 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 stash --keep-index 正是我所需要的。 --keep-index 对我来说也是新的。谢谢和+1 @VonC:很好的解释。这(和`git-rebase -i)是我真正喜欢使用Git的事情之一,我一直在做这种事情。它使您能够制作您的提交,以便它们有意义并且仅包含相关(相关)更改。git add -p
通常是您需要的,而不是 git add -i
。【参考方案2】:
这是我使用的一种魔法方式:
使用 magit "u" 或 "s" 为第一次提交创建索引以暂存或取消暂存块/文件/区域。 (这也可以用 git gui 完成)。准备好提交索引后: commit with "c", write your commit message, Ctrl-C Ctrl-C to commit。 stash 使用 "z" 后跟 >,这将存储您的所有更改。要取回您的更改,您可以在指针位于正确的存储条目上时使用“A”。进行测试以检查您的提交是否良好。如果必须进行任何更改,请像以前一样重做,但在提交消息的屏幕上提交之前按 Ctrl-C Ctrl-A。这将修改(完成)您的上一次提交,而不是创建一个新的提交。
请注意,如果您稍后发现某些代码应该修改您上次完成之前的提交,您应该自行提交代码(带有临时摘要),并将它们折叠到正确的提交中谢谢到“L”以访问日志屏幕,然后在您想要压缩的两个提交之前指向您的指针,然后按“E”启动“git rebase -i”会话。 重新排序提交,以便临时摘要“修复”目标提交。退出缓冲区和 TADA。一切都完成了。
【讨论】:
以上是关于Git:进入 Commit 阶段,正确的工作流程是啥?的主要内容,如果未能解决你的问题,请参考以下文章