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

jus*_*ach 1 git version-control

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

我想将已完成的功能提交到开发人员并将这些功能合并回主分支进行部署,但暂时将未完成的修改保留在dev上.

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

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

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

Jak*_*ski 5

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

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

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

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

    $ git commit
    
    Run Code Online (Sandbox Code Playgroud)

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

  4. 存放尚未准备好的变化

    $ git stash save
    
    Run Code Online (Sandbox Code Playgroud)
  5. Checkout'master'分支,并在'dev'分支中合并(这应该导致快进):

    $ git checkout master
    $ git merge dev
    
    Run Code Online (Sandbox Code Playgroud)
  6. 返回'dev'分支,取消暂停您的更改

    $ git checkout dev
    $ git stash pop
    
    Run Code Online (Sandbox Code Playgroud)

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