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

Git-需要一些关于rebase的解释吗,git,Git,我试过谷歌,没有帮助 我有一个活跃的操作系统项目,不断更新好的东西,我正在它的基础上开发 假设我得到了项目的git存储库(我们称之为当前状态x),当前状态为: 操作系统项目 x 我的项目(添加了一些y更改) 现在已更新操作系统项目: x -> z 我不想让我的项目包含z并且看起来像 x -> z -> y 或 有人能解释一下我是如何做到这一点的吗?简单的方法是使用以下两个命令(在中断或提交更改后): 第一个从名为“origin”的远程存储库获取原始存储库中的更改。第二个将

我试过谷歌,没有帮助

我有一个活跃的操作系统项目,不断更新好的东西,我正在它的基础上开发

假设我得到了项目的git存储库(我们称之为当前状态x),当前状态为:

操作系统项目

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

现在已更新操作系统项目:

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

x -> z -> y


有人能解释一下我是如何做到这一点的吗?

简单的方法是使用以下两个命令(在中断或提交更改后):

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

这里需要注意的重要一点是,您使用的是
git fetch
,而不是
git pull
。后者是一个
获取
,然后是一个自动的
合并
。你不会想要的


如果你正在寻找另一种方法,我总是在我的分支上工作。然后,我可以使master与维护者的版本保持一致,并且我可以继续重定并行分支的基址。如果我的分支还有其他用户,我会将主节点合并到其中。

假设x、y和z是分支(x和z实际上是同一个分支),并且您签出了y,您可以执行以下操作:

git rebase z

这样做的目的是重放从创建y的点开始的所有提交,在z的顶部,为您生成一个新的y。请注意,执行此操作时正在更改历史记录。也就是说,在更改重基之前,您在y上的所有提交的sha。如果你是唯一一个研究y的人,这不是问题。如果您在一个团队中工作,并且有多人承诺使用y,那么重新定基可能是个坏主意。在这种情况下,可以从z合并到y。这在不更改历史记录的情况下实现了您的目标。

将M作为主分支调用,将D作为从M派生的分支调用,当您希望将D合并回M并保留“平面”提交历史记录时,从M重新设置D的值是有意义的。当不需要合并冲突时,这是最干净的解决方案。相反,在将主分支合并到派生分支时,应避免重定基址。我相信这相当于git pull--rebase,这是一个很好的处理方法。您还可以使用git config branch.master.rebase true将分支设置为拉入时重新基址。您还可以使用
git config branch.autosetuprebase always
@Bill all-excellent-alternative将git设置为始终使所有远程分支在拉取时重新基化。我倾向于只学习基本的操作,并将它们结合起来。谢谢你的捷径。
z -> y
$ git fetch origin master
$ git rebase FETCH_HEAD
git rebase z