git的变基合并
我有以下情况:git的变基合并
- 我创建了一个
clone
(Y)从主存储库(X),因为有很多人Y上的合作,我们没有做任何rebase
但只有merge
s。当我们想传递(push
)Y到X,我们想以有事情做了rebase
非常干净
的问题是,这样做rebase
当我们被要求做所有的合并,我们已经在前面的merge
步骤中做过。除此之外,是否有解决方案,这意味着实际上重新合并?
我认为它很简单,因为我们已经解决了冲突的合并。
重新获得“干净”历史被高估。如果你想保留历史,最好的方法就是做合并而不是变形。这样,如果您需要返回修订版本,那么就是,与您在开发期间测试的版本相同。这也解决了您之前解决的合并冲突的问题。
如果你不关心保存历史记录,你可以创建一个新的分支关闭,检查出来,然后做一个git read-tree -u -m dev
更新你的工作树匹配dev
分支。然后,您可以将所有内容提交到一个大提交,并将其正常合并到主文件中。
您在这里有效完成的是合并。新的分支是不必要的。 – 2014-08-13 01:43:11
@isakgilbert只有与'--squash'合并时才是一样的。如果分支上有_N_提交,则定期合并将添加_N_或_N + 1_提交。上面的建议,或者'merge --squash',将总是只向master添加一个提交。 – peterflynn 2015-03-17 17:40:09
@ytpete,是的。我觉得以上只是一个迂回的合并方式 - 从开发者到主人。 “创建一个新的分支”只是指向与主人一样的地方。 “把所有事情都变成一项大事”就是在做壁球。 – 2015-03-17 22:18:06
两个备注:
- 您可以变基您自己的(非又推)工作,只要你想上新取的提交顶部尽可能多的时间。
- 如果您有activated
git rerere
,您可以避免合并冲突(在重新绑定期间),这是为这种情况完成的。看到更多的在
git rerere
。
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
然后阶段您的文件并提交。
At:“因为有很多人在Y上工作,我们没有做任何rebase但是只能合并”,你的意思是与上游合并是它吗? – 2014-01-11 22:02:14