28

我有一个已提取并从中分支的远程存储库。我想通过对 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
    

根据需要重复第 2 步,并定期推送到遥控器my_branch

然后当准备好合并回来时:

git checkout master

git merge my_branch --no-ff

好听吗?

4

2 回答 2

22

您可以简化命令:

1.

git fetch
git checkout -b my_branch origin/master

2.

git fetch
git merge origin/master

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

可以省略--no-ffafter 设置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 fetch和的组合git merge

通常你只想要git pull --rebase本质上是git fetchplus git rebase,并创建一个更清晰的历史。

您的“定期推送”有什么理由吗?如果没有其他人在同一个分支上工作,那会很好,只需在完成所有内容后推送即可。

于 2013-11-03T23:56:50.803 回答
14

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

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

但老实说,我在一个小团队工作,如果我们需要一起开发一个特性分支,并且我们需要与 master 更新它,那么我们只需暂停我们的工作片刻(并清楚地传达流程) ,基于 master 并强制推送功能分支。但是,是的,这不适用于更大的团队。但是,我发现使用基于 master 的功能分支更方便,而不必处理来自 master 的合并。

请务必阅读此内容。

Git 工作流程和变基与合并问题

于 2013-11-03T22:47:40.240 回答