git的变基合并

问题描述:

我有以下情况:git的变基合并

  • 我创建了一个clone(Y)从主存储库(X),因为有很多人Y上的合作,我们没有做任何rebase但只有merge s。当我们想传递(push)Y到X,我们想以有事情做了rebase非常干净

的问题是,这样做rebase当我们被要求做所有的合并,我们已经在前面的merge步骤中做过。除此之外,是否有解决方案,这意味着实际上重新合并?

我认为它很简单,因为我们已经解决了冲突的合并。

+0

At:“因为有很多人在Y上工作,我们没有做任何rebase但是只能合并”,你的意思是与上游合并是它吗? – 2014-01-11 22:02:14

重新获得“干净”历史被高估。如果你想保留历史,最好的方法就是做合并而不是变形。这样,如果您需要返回修订版本,那么就是,与您在开发期间测试的版本相同。这也解决了您之前解决的合并冲突的问题。

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

+1

您在这里有效完成的是合并。新的分支是不必要的。 – 2014-08-13 01:43:11

+0

@isakgilbert只有与'--squash'合并时才是一样的。如果分支上有_N_提交,则定期合并将添加_N_或_N + 1_提交。上面的建议,或者'merge --squash',将总是只向master添加一个提交。 – peterflynn 2015-03-17 17:40:09

+2

@ytpete,是的。我觉得以上只是一个迂回的合并方式 - 从开发者到主人。 “创建一个新的分支”只是指向与主人一样的地方。 “把所有事情都变成一项大事”就是在做壁球。 – 2015-03-17 22:18:06

两个备注:

  • 您可以变基您自己的(非又推)工作,只要你想上新取的提交顶部尽可能多的时间。
  • 如果您有activated git rerere,您可以避免合并冲突(在重新绑定期间),这是为这种情况完成的。
    http://git-scm.com/images/rerere2.png 看到更多的在git rerere
+0

不幸的是,我没有'rerere'激活... – INS 2011-06-06 07:47:44

+0

@lulian:在这种情况下,如果您必须重定义您的工作,我认为您将不得不再次执行这些合并冲突解决方案。 – VonC 2011-06-06 08:09:38

+0

链接到激活rerere不起作用。 – krlmlr 2013-12-11 12:49:29

git merge --squash现在我是大量工作和大量合并(see this answer)之后的首选投标方式。如果你工作的分支上被称为my-branch,你想从master衍合然后只需做到以下几点:

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 

你可以把所有的在你的分支的变化,并把它们放入一个新的提交在master与以下内容:

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

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