2011-09-22 70 views
1

我试过谷歌,没有帮助。Git - 需要关于rebase的一些解释

我得到了一个有效的OS项目,保持与好东西,我在它上面开发更新,

因此,可以说我得到了这个项目的git仓库(让我们称之为当前状态x)和目前的现状是:

OS项目

x 

我的项目(加时有些变化)

x -> y 

现在OS项目更新:

x -> z 

,我wan't我的项目包含Z和看起来像

x -> z -> y 

z -> y 

有人能解释我如何使它发生?

回答

2

简单的方法是使用下面的两个命令(你迭加或承诺更改后):

$ git fetch origin master 
$ git rebase FETCH_HEAD 

第一个获取从远程命名为“起源”原仓库的变化。第二个将您的更改移动到新的远程HEAD。

这里需要注意的重要一点是,您使用git fetch而不是git pull。后者是fetch,后面是自动merge。你不想那样。

如果您正在寻找替代方法,我总是在我的单独分支上工作。然后,我可以让主人等同于维护者的版本,并且我可以继续重新绑定我的并行分支。如果我的分支有其他用户,我会将主人合并到它中。

+1

我相信这相当于'git pull --rebase'。你也可以使用'git config branch.master.rebase true'设置一个分支来重新绑定。你也可以设置git来始终使用'git config branch.autosetuprebase always'使所有的远程分支在拉动下拉动。 –

+0

@Bill所有优秀的替代品。我倾向于只学习基本操作,并将它们结合起来。感谢您的快捷键。 – vhallac

1

假设x,y和z是分支(X和Z轴实际上是同一个分支),你必须ÿ签出,你可以这样做:

git rebase z 

这样做是什么重播所有你从y创建点开始的提交,在z之上,为你产生一个新的y。请注意,当你这样做时,你正在改变历史。也就是说,在rebase之前你提交的所有SHA都被改变了。如果你是唯一一个在y上工作的人,这不是问题。如果你在一个团队中工作,并且有多个人对y做出承诺,那么重新定义可能是一个糟糕的主意。在这种情况下,您可以从z合并到y。在不改变历史的情况下实现您的目标。

+1

将M作为_main_分支并将D作为从M分支出来的分支,将D从M分出来是合理的,当你想将D合并到M中并保留一个“平坦”提交历史时。当没有合并冲突时,这是最干净的解决方案。相反,在将主分支合并到派生分支时,应避免重新分配。在[使用Git进行版本控制]中有一个很好的处理方法[http://www.amazon.co.uk/Version-Control-Git-collaborative-development/dp/0596520123/ref=sr_1_1?ie=UTF8&qid= 1316715248&SR = 8-1) –