如何在不提交“非就绪”更改的情况下将我的“就绪”更改合并到另一个分支?

时间:2009-10-29 12:22:03

标签: git version-control

我有两个分支:masterdevelopmentdevelopment分支包含一些已完成的新功能和几个未完成的修改 - 但尚未提交任何内容。自创建分支以来,Master没有改变。

我想将已完成的功能提交给dev并将它们合并回主分支进行部署,但是暂时将未完成的修改保留在dev上。

顺便说一下,没有任何文件跨越两个类别(例如,没有任何内容被更改/添加为新的完整功能的一部分,后来被修改为尚未完成的功能的一部分。)

我的直觉是,我应该手动将完成的功能集中的所有隐含文件添加到git队列,将这些文件提交到dev,然后将分支切换到master并进行合并。

但这会保存我在dev分支中未提交功能的工作吗?或者这是需要存储的情况之一?如果是这样,做正确的命令是什么?

3 个答案:

答案 0 :(得分:5)

我认为最简单的解决方案,没有任何技巧,将是:

  1. 对包含已完成(就绪)功能更改的所有文件使用git add <file> 旁注: 即使您的更改混合在一起,您也可以使用git add --interactive选择下一次提交中您希望拥有的更改部分。

  2. (可选)测试您现在在索引中准备的更改:

    $ git stash --keep-index
    $ run tests
    $ git stash pop
    
  3. 根据索引中准备的更改(包含准备好的更改)进行提交

    $ git commit
    

    (我个人使用git commit -s进行自动签收,但这取决于项目使用的做法)

  4. 收起尚未准备好的变更

    $ git stash save
    
  5. 结帐'主'分支,并合并'dev'分支(这应该会导致快进):

    $ git checkout master
    $ git merge dev
    
  6. 返回'dev'分支,取消暂停更改

    $ git checkout dev
    $ git stash pop
    
  7. 你可以在不使用git stash的情况下做到这一点,依靠'master'分支应该快进并通过git update-ref命令直接操作'master'分支这一事实。不过我不推荐它。

答案 1 :(得分:1)

您可以在那里使用存储来保存本地mod并转到master进行合并。

但是,如果这些功能不相关,我会将所有内容提交给dev,rebase -i将未完成的功能置于所有内容之上,然后获取上次完成提交的ID。

然后从大师那里做git merge last-completed-commit-id ,那就是全部。

编辑:使用rebase -i你可以交互式地重新提交提交,所以如果它们是独立的你就不应该有问题,只需要git rebase -i HEAD~5(5次提交)和重新排序。
如果您的提交不是独立的并且需要一个接一个地进行,那么这当然不会起作用

答案 2 :(得分:0)

查看存储和一些示例如何使用它here。 我个人只提交脏分支,然后与以前的版本合并。承诺在git中很便宜,其背后的意图是经常提交。