我有一个远程存储库,我已经提取并从中分支出来。我想让新分支保持最新状态,对master进行更改。我正在考虑下面的工作流程,它是否有意义或有更好的方法来做到这一点?
初始分支和结帐:
git checkout master
git pull
git checkout -b my_branch
在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
听起来不错?
答案 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 fetch
和git merge
的组合。
通常您只需要git pull --rebase
,基本上是git fetch
加git rebase
,并创建更清晰的历史记录。
你的“定期推送”有什么理由吗?如果没有其他人在同一个分支上工作,那就完全没问题了,只需在完成所有工作后再推动。
答案 1 :(得分:11)
我建议使用rebase工作流程。因此,您应该使用git pull
。
git pull --rebase
我会对功能分支做同样的事情。因此,我会使用git merge master --no-ff
而不是git rebase master
。但是,如果要在开发期间与同事共享功能分支,那么最好将主分支定期合并到功能分支中。
但说实话,我在一个小团队工作,如果我们需要共同完成一个功能分支,我们需要让它与主人保持同步,那么我们暂时暂停我们的工作(并传达过程清楚),主人和力量的rebase推动功能分支。但是,这对于更大的球队来说并不适用。但是,我发现使用在master上重新定义的功能分支更方便,而不必处理来自master的合并。
请务必阅读此内容。