【问题标题】:Git: Stage into Commit, what is the right workflow?Git:进入 Commit 阶段,正确的工作流程是什么?
【发布时间】:2010-04-17 14:53:09
【问题描述】:

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

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

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

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

更新:
用magit怎么做?

【问题讨论】:

    标签: git commit split staging


    【解决方案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。一切都完成了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 2014-05-11
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2011-01-20
      相关资源
      最近更新 更多