在我的git工作流中,我们有一个主要的代码库和一个名为master的分支。每个人都从远程的master分支拉取代码并将代码推送到远程的master分支。当我准备开发一个新功能时,我想在自己的分支上工作。目前为止,我的版本历史记录大致如下:
git pull --rebase
git checkout -b new_feature
<make some commits>
git checkout master
git pull --rebase
现在我想要合并分支,以下是我需要的:
- 我的本地主分支中没有合并提交。
- 将所有在新功能分支上进行的提交合并到主分支中,就好像我是在主分支上进行了这些提交。
- 所有已经合并的提交都会被合并到本地远程头指针的某个位置上面。
我最担心的是第三点,在安全推送更改之前需要做什么。如果已经合并的提交与头部之前的提交交织在一起,那么我将无法推送,参见我遇到的相关问题:git: Pushing Single Commits, Reordering with rebase, Duplicate Commits。
我已经阅读了以下内容:
- http://mettadore.com/2011/05/06/a-simple-git-rebase-workflow-explained/
- Keep commits history after a 'git merge'
- How do you rebase the current branch's changes on top of changes being merged in?
我认为我需要执行以下操作:
git checkout master
git pull --rebase
git checkout new_feature
git rebase master
git checkout master
git rebase new_feature
git push
我的理解是:
git checkout new_feature
git rebase master
将使新功能看起来像是从新的当前主干分支出来的。这是真的吗?
git checkout master
git rebase new_feature
将 new_feature 置于 master 之上。这样正确吗?如果是这样,那么这就是我困惑的主要问题。如果 "git rebase master" 将 master 的提交置于 new_feature 底部,那么为什么 "git rebase new_feature" 将 new_feature 的提交置于 master 顶部,即为什么它不相反呢?
new_feature
分支已经存在,否则您需要使用-b
选项。 - Shaun Luttin