Git 如何合并我的";准备好了吗;在未提交;“未准备就绪”;变化?

Git 如何合并我的";准备好了吗;在未提交;“未准备就绪”;变化?,git,version-control,Git,Version Control,我有两个分支:master和development。development分支包含了一些已完成的新特性和一些未完成的修改,但是还没有提交任何内容。自dev分支创建以来,Master没有更改 我想将已完成的特性提交给dev,并将它们合并回主分支以进行部署,但暂时不提交dev上未完成的修改 顺便说一句,没有任何文件跨越这两个类别(例如,没有任何文件作为新的完整功能的一部分进行更改/添加,该功能后来被修改为尚未完成的功能的一部分) 我的直觉是,我应该手动将完成的特性集中的所有相关文件添加到git队列中

我有两个分支:
master
development
development
分支包含了一些已完成的新特性和一些未完成的修改,但是还没有提交任何内容。自dev分支创建以来,Master没有更改

我想将已完成的特性提交给dev,并将它们合并回主分支以进行部署,但暂时不提交dev上未完成的修改

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

我的直觉是,我应该手动将完成的特性集中的所有相关文件添加到git队列中,提交给dev,然后将分支切换到master并进行合并


但是,这会保存我在dev分支中未提交特性方面的工作吗?或者这是需要隐藏的情况之一?如果是这样的话,正确的操作顺序是什么?

您可以在那里使用stash保存本地mod,然后转到master进行合并

但是,如果这些特性是不相关的,我会将所有内容提交给dev,重新设置-I的基址,将未完成的特性放在所有内容之上,然后获取上次完成提交的id

然后从master开始,只需执行git合并最后完成的提交id,就这样了

编辑:使用rebase-i,您可以交互地重新排序提交,因此如果它们是独立的,您应该不会有问题,只需git rebase-i HEAD~5(用于5次提交)并重新排序行即可。

如果您的提交不是独立的,并且需要一个接一个地提交,那么这当然不起作用。

您可以在那里使用stash来保存本地mod,然后转到master进行合并

但是,如果这些特性是不相关的,我会将所有内容提交给dev,重新设置-I的基址,将未完成的特性放在所有内容之上,然后获取上次完成提交的id

然后从master开始,只需执行git合并最后完成的提交id,就这样了

编辑:使用rebase-i,您可以交互地重新排序提交,因此如果它们是独立的,您应该不会有问题,只需git rebase-i HEAD~5(用于5次提交)并重新排序行即可。

如果您的提交不是独立的,并且需要一个接一个地提交,那么这当然不起作用。请查看stash和一些如何使用它的示例。
就个人而言,我只需提交脏分支,然后与以前的版本合并。提交在git中很便宜,背后的目的是频繁提交。

看看隐藏和一些如何使用它的示例。
就个人而言,我只需提交脏分支,然后与以前的版本合并。提交在git中很便宜,其目的是频繁提交。

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

  • 对于所有包含已完成(准备就绪)功能更改的文件,请使用
    git add

    旁注:即使您的更改混杂在一起,您也可以使用
    git add--interactive
    选择要在下一次提交中进行更改的部分

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

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

    (我个人使用
    gitcommit-s
    进行自动签核,但这取决于项目使用的实践)

  • 隐藏尚未准备好的更改

    $ git stash save
    
  • 签出“主”分支,并合并到“开发”分支(这将导致快进):

  • 返回到“dev”分支,取消显示您的更改

    $ git checkout dev
    $ git stash pop
    

  • 通过依赖“master”分支应该快速前进的事实,并通过
    git update ref
    命令直接操作“master”分支,您将能够在不使用
    git stash的情况下实现这一点。不过我不推荐

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

  • 对于所有包含已完成(准备就绪)功能更改的文件,请使用
    git add

    旁注:即使您的更改混杂在一起,您也可以使用
    git add--interactive
    选择要在下一次提交中进行更改的部分

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

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

    (我个人使用
    gitcommit-s
    进行自动签核,但这取决于项目使用的实践)

  • 隐藏尚未准备好的更改

    $ git stash save
    
  • 签出“主”分支,并合并到“开发”分支(这将导致快进):

  • 返回到“dev”分支,取消显示您的更改

    $ git checkout dev
    $ git stash pop
    

  • 通过依赖“master”分支应该快速前进的事实,并通过
    git update ref
    命令直接操作“master”分支,您将能够在不使用
    git stash的情况下实现这一点。不过我不推荐

    我不确定我是否完全理解在这种情况下,你所说的重新定基是什么意思——你能澄清一下吗?我对rebase的理解是,它通常是为了使开发分支能够在主分支上独立地进行更改,从而加快速度,方法是导入主分支的新版本,然后在开发的基础上展开更改。在这种情况下,我将如何使用它?谢谢我不确定我是否完全理解在这种情况下,你所说的重新定基是什么意思——你能澄清一下吗?我对rebase的理解是,它通常是为了让开发分支在主分支上独立地进行更改时加快速度,方法是导入主分支的新版本,然后推出更改