我有master
分支和develop
分支,用于处理一些更改。我需要将master
中的更改合并到develop
,但最终会将develop
中的所有内容合并到master
。我有两个不同的工作流程:
git pull origin master
进入develop
分支git merge master
进入develop
分支这是最好的方法,为什么?
答案 0 :(得分:342)
此工作流程最适合我:
git checkout -b develop
......做一些改变......
...通知大师已更新......
...提交改变以发展......
git checkout master
git pull
......让这些变化重新发展......
git checkout develop
git rebase master
......做出更多改变......
......让他们发展......
...将它们合并为主...
git checkout master
git pull
git merge develop
答案 1 :(得分:101)
小心使用rebase。如果您与任何人共享您的开发分支,rebase可能会弄乱一切。 Rebase仅适用于您自己的本地分支机构。
经验法则,如果您将分支推到原点,请不要使用rebase。相反,请使用合并。
答案 2 :(得分:23)
此类事情的最佳方法可能是git rebase
。它允许您将更改从master转移到开发分支,但是将所有开发工作“置于”(稍后在提交日志中)来自master的内容。当你的新工作完成后,合并回主人就非常简单了。
答案 3 :(得分:5)
如果你不与任何人共享开发分支,那么每次master更新时我都会重新设置它,这样你就可以在将开发合并到master之后的整个历史记录中进行合并提交。这种情况下的工作流程如下:
> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull origin master
> git rebase master develop
以上步骤将确保您的开发分支始终位于主分支的最新更改之上。一旦你完成了开发分支并且它已经重新定位到master上的最新更改,你可以将它合并回来:
> git checkout -b master
> git merge develop
> git branch -d develop
答案 4 :(得分:1)
我的经验法则是:
对于同名的分支机构
rebase
,否则为merge
。
相同名称的示例包括master
,origin/master
和otherRemote/master
。
如果develop
仅存在于本地存储库中,并且始终基于最近的origin/master
提交,则应将其称为master
,并直接在那里工作。它简化了你的生活,并呈现了实际的东西:你正在master
分支上直接开发。
如果共享develop
,则不应在master
上进行重新定位,只需将--no-ff
合并回develop
。你是在master
开发的。 develop
和rebase
有不同的名称,因为我们希望它们是不同的东西,并保持独立。不要与android.support.v4.util.ArrayMap
相同。
答案 5 :(得分:0)
我更喜欢将 git pull origin <branch_name>
用于我希望合并到的分支。
我实际上从未使用过 git merge <branch_name>
原因,当我开始使用它时,我曾经在 GitLab 中遇到过它的错误。
但现在它也更合乎逻辑……因为 git pull
确实:
(a) git fetch
(b) git merge
2 个命令 vs 一个;使保持工作快速进行的应用程序毫不费力。
PS:如果您不确定会发生什么,最好在那里使用“分解”命令;)