2016-06-08 47 views
9

场景:我分叉了一个github项目并开始对它进行处理(在将原始项目添加为远程时称为“上游”)。在使用我的fork时,上游项目发布了许多版本:v1.3-stable,v1.4-stable,v1.5-experimental等。现在我需要将上游提交合并到我的主分支,但仅限于特定发行版,例如发行版v1.4-stable。这种情况下最好的工作流程是什么?Git合并提交来自特定的上游版本

+0

你能提供一个链接到GitHub的回购? –

回答

3

假设V1.4稳定的遥控器上的一个标签,你可以通过包含您的工作的分支调用此将这些更改应用到本地回购:

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

版本列表找到ID从v1.4-stable开始的最新提交,之后这些提交被重播,你自己的工作放在最上面。如果遥控器在分叉后发生了显着变化,将会发生冲突。

如果V1.4稳定是遥控器上的一个分支,你反而会想要做

git pull --rebase origin v1.4-stable 
+0

为什么不合并分支或标签?为什么这个rebase?这只是合并跟踪。 – jszakmeister

+0

我可能会在这里回答我自己的问题,但我认为这是因为您认为OP正在寻求将他们的工作整合到上游......在这种情况下,rebase是有道理的。 – jszakmeister

1

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

其次,reset你的主分支上行/ V1.4(确保你没有任何正在进行的工作:一个硬复位将消灭他们)

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

最后,衍合V1。在主控制器上的5分支分支(即在v1.4之上)

第一个,activate rerere(如果您之后必须做多个rebase:这会记录您在过去如何解决类似冲突)

git config --global rerere.enabled true 

然后变基(重播你从你的分支上提交V1.4的顶部):

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

的冲突,你将不得不解决,应该只有两个感兴趣的上游和完成并发修改冲突(你的实验分支)。

+0

你正在告诉某人在其repo上运行'git reset --hard'。至少警告可能造成的后果...... –

+0

@HaraldNordgren谢谢你。我相应地编辑了我的答案。 – VonC

+1

是什么让你觉得他们没有工作进展?这个问题的重点似乎是重新将个人工作与偏远地区的变化结合起来。 git重置似乎是彻头彻尾的破坏性。 –

2

这假定v1.4-stable是一个提交指示释放,在主分支中的标签。 结帐主拉的最新变化:

git checkout master 
git pull --rebase 

其次,重订对这次提交顶端的开发分支。确保你的工作树是干净的,你的头指向您的开发分支:

git rebase v.14-stable 

这个命令将改变你的分支的基地,包括标签的v.1.4-stable提交,并在它之前所有其他版本。

底垫之前:

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 
-1
git pull --rebase origin v1.4-stable