与主人保持最新的分支机构

时间:2013-11-03 22:22:31

标签: git git-branch git-merge

我有一个远程存储库,我已经提取并从中分支出来。我想让新分支保持最新状态,对master进行更改。我正在考虑下面的工作流程,它是否有意义或有更好的方法来做到这一点?

  1. 初始分支和结帐:

    git checkout master
    
    git pull
    
    git checkout -b my_branch
    
  2. my_branch中做一些工作,然后定期:

    git checkout master
    
    git pull
    
    git checkout my_branch
    
    git merge master --no-ff
    
  3. 根据需要重复步骤2,定期推送到远程my_branch

    然后准备好合并时:

    git checkout master
    
    git merge my_branch --no-ff
    

    听起来不错?

2 个答案:

答案 0 :(得分:17)

您可以简化命令:

1

git fetch
git checkout -b my_branch origin/master

2

git fetch
git merge origin/master

git fetch更新您的远程分支,当您不打算在此分支上工作时,通常不需要拥有分支的本地副本。

设置--no-ff后,您可以省略git config --global merge.ff false

git help config说:

   merge.ff
       By default, Git does not create an extra merge commit when merging
       a commit that is a descendant of the current commit. Instead, the
       tip of the current branch is fast-forwarded. When set to false,
       this variable tells Git to create an extra merge commit in such a
       case (equivalent to giving the --no-ff option from the command
       line). When set to only, only such fast-forward merges are allowed
       (equivalent to giving the --ff-only option from the command line).

请注意,git pull只是git fetchgit merge的组合。

通常您只需要git pull --rebase,基本上是git fetchgit rebase,并创建更清晰的历史记录。

你的“定期推送”有什么理由吗?如果没有其他人在同一个分支上工作,那就完全没问题了,只需在完成所有工作后再推动。

答案 1 :(得分:11)

我建议使用rebase工作流程。因此,您应该使用git pull

,而不是使用git pull --rebase

我会对功能分支做同样的事情。因此,我会使用git merge master --no-ff而不是git rebase master。但是,如果要在开发期间与同事共享功能分支,那么最好将主分支定期合并到功能分支中。

但说实话,我在一个小团队工作,如果我们需要共同完成一个功能分支,我们需要让它与主人保持同步,那么我们暂时暂停我们的工作(并传达过程清楚),主人和力量的rebase推动功能分支。但是,这对于更大的球队来说并不适用。但是,我发现使用在master上重新定义的功能分支更方便,而不必处理来自master的合并。

请务必阅读此内容。

Git workflow and rebase vs merge questions