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 阶段,正确的工作流程是啥?的主要内容,如果未能解决你的问题,请参考以下文章

优化前端工作流:一、使用husky对commit日志校验

Git Flow 的正确使用姿势

Git:工作原理

InnoDB事务的二阶段提交

git 仓库 回退功能 git checkout

git代码提交流程