之前的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期间),这是为了这种情况。
在git rerere
看到更多。
您可以在分支中进行所有更改,并将其置于master
的新提交中,如下所示:
git diff master > my_branch.patch git checkout master patch -p1 < my_branch.patch
然后阶段您的文件并提交。