Git - 需要一些关于rebase的解释

时间:2011-09-22 17:52:31

标签: git

我试过谷歌,没有帮助。

我有一个活跃的os项目,不断更新好的东西,我正在开发它,

所以我想说我得到了项目的git存储库(让我们调用当前状态x),当前状态是:

OS项目

x

我的项目(添加了一些y更改)

x -> y

现在OS项目已更新:

x -> z

我不想让我的项目包含z并且看起来像

x -> z -> y

z -> y

有人可以解释我该如何实现它?

2 个答案:

答案 0 :(得分:2)

简单的方法是使用以下两个命令(在您进行了更改或提交更改之后):

$ git fetch origin master
$ git rebase FETCH_HEAD

第一个从名为“origin”的远程获取原始存储库中的更改。第二个将您的更改移动到新的远程HEAD。

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

如果您正在寻找替代方法,我总是在我的单独分支上工作。然后我可以保持大师等于维护者的版本,我可以继续改变我的并行分支。如果我的分支中有其他用户,我将主服务器合并到其中。

答案 1 :(得分:1)

假设x,y和z是分支(并且x和z实际上是相同的分支),并且您已经签出,那么您将执行此操作:

git rebase z

这样做是重播所有提交的,从创建y的位置开始,在z之上,为您生成一个新的y。请注意,执行此操作时您将更改历史记录。也就是说,在rebase之前你所提交的所有SHA都被改变了。如果你是唯一一个在y上工作的人,这不是问题。如果你在一个团队中工作,并且有多个人已经承诺y,那么变基可能是一个坏主意。在这种情况下,您可以从z合并到y。这可以在不改变历史的情况下实现您的目标。