Git合并来自特定上游版本的提交

时间:2016-06-08 13:45:33

标签: git github upstream-branch

场景:我已经分叉了一个github项目并开始研究它(在将原始项目添加为名为'upstream'的远程项目之后)。在我的fork上工作时,向上游项目发布了许多版本:v1.3-stable,v1.4-stable,v1.5-experimental等。现在我需要在上游提交中合并到我的主分支,但仅限于特定版本,例如,发布v1.4-stable。这种情况的最佳工作流程是什么?

4 个答案:

答案 0 :(得分:3)

假设v1.4-stable是遥控器上的标签,您可以通过从包含您的工作的分支调用此更改将其应用于本地存储:

git fetch
git rebase --onto $(git rev-list -n1 v1.4-stable)

Rev-list从v1.4-stable中找到最新提交的ID,然后重放这些提交,并将您自己的工作整齐地置于顶部。如果自分叉后遥控器发生了重大变化,则会发生冲突。

如果v1.4-stable是遥控器上的一个分支,你将会想要

git pull --rebase origin v1.4-stable

答案 1 :(得分:2)

这假定v1.4-stable是主分支上指示释放的提交的标记。 结帐主人并提取最新的更改:

git checkout master
git pull --rebase

接下来,在此提交的基础上重新定义您的开发分支。确保您的工作树干净,并且您的HEAD指向您的开发分支:

git rebase v.14-stable

此命令将更改分支的基础以包含v.1.4-stable标记的提交以及其前面的所有其他版本。

在rebase之前:

o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp  master
     \
      o---o---o  dev

后:

o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp  master
                           \
                            o---o---o  dev

答案 2 :(得分:1)

首先确保您在v1.5-experimental的专用分支中工作。

其次,将主分支重置为上游/ v1.4(确保您没有正在进行的任何工作:硬重置会将其删除)

git fetch upstream
git checkout master
git reset --hard upstream/v1.4
git push -f

最后,将你的v1.5-exprimental分支重新设置在master之上(在v1.4之上)

Fist,activate rerere(如果您以后必须进行多次转换:将记录您过去如何解决类似的冲突)

git config --global rerere.enabled true

然后rebase(在v1.4之上重播你的分支提交):

git checkout v1.5-experimental
git rebase master
git push -f

您必须解决的冲突应该只是利益冲突(在上游和实验分支中同时进行的修改)。

答案 3 :(得分:-1)

git pull --rebase origin v1.4-stable