之前的git合并之后的git rebase

我有以下情况:

  • 我从一个主存储库(X)创build了一个clone (Y),因为有很多人在Y上工作,我们没有做任何rebase但是只merge s。 当我们想把( push )Y给X时,我们想要做一个rebase ,以便让事情变得漂亮和干净

问题是,在进行rebase我们被要求做前面merge步骤中所做的所有merge 。 有没有解决这个问题,除了那个意味着实际上重新合并?

我认为这是相当直接的,因为我们已经解决了冲突的合并。

重新获得“清洁”历史被高估。 如果你想保留历史,最好的办法就是做合并而不是转换。 这样,如果您需要回到修订版本,那么您在开发过程中testing的版本完全一样。 这也解决了您之前解决的合并冲突的问题。

如果你不关心保存历史,你可以创build一个新的分支,检查出来,然后做一个git read-tree -u -m dev以更新您的工作树,以匹配dev分支。 然后,您可以将所有内容都提交到一个大的提交,并将其正常合并到主机中。

git merge --squash现在是我经过大量工作和许多合并( 请参阅这个答案 )之后重新定义的首选方法。 如果您正在使用的分支被称为my-branch并且想要从master进行rebase,那么只需执行以下操作:

 git checkout my-branch git branch -m my-branch-old git checkout master git checkout -b my-branch git merge --squash my-branch-old git commit 

两点评论:

  • 您可以在新提取的提交之上尽可能多地重新绑定自己的(未推送的)工作。
  • 如果你已经激活了git rerere ,你可以避免合并冲突(在rebase期间),这是为了这种情况。
    http://git-scm.comhttp://img.dovov.comrerere2.pnggit rerere看到更多。

您可以在分支中进行所有更改,并将其置于master的新提交中,如下所示:

 git diff master > my_branch.patch git checkout master patch -p1 < my_branch.patch 

然后阶段您的文件并提交。