我有以下情况:
clone
(Y),因为有许多人在Y上工作,我们没有做任何rebase
但只有merge
s。当我们想要(push
)Y到X时,我们想做一个rebase
,以便让事情干净整洁问题是,在做rebase
时,我们被要求进行我们在之前的merge
步骤中已经完成的所有合并。有没有解决方案,除了意味着重新进行合并的那个?
我预计它会非常简单,因为我们已经解决了冲突的合并。
重新获得“干净”的历史被高估了。如果要保留历史记录,最好的方法就是进行合并而不是变换。这样,如果您需要返回修订版,它与您在开发期间测试的版本完全相同。这也解决了您之前解决的合并冲突的问题。
如果您不关心保留历史记录,您可以从master创建一个新分支,检查它,然后执行git read-tree -u -m dev
更新您的工作树以匹配dev
分支。然后,您可以将所有内容提交到一个大提交中,并将其合并到master中。
在经过大量工作和许多合并(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
两个评论:
git rerere
,你可以避免合并冲突(在rebase期间),这是针对这种情况做的。
在git rerere
查看更多信息。您可以在分支中进行所有更改,并使用以下内容将它们放入master
中的新提交中:
git diff master > my_branch.patch
git checkout master
patch -p1 < my_branch.patch
然后暂存你的文件并提交。
关于合并冲突的重放,您可以使用git rerere来维护已经解决了合并冲突的数据库,以便执行导致相同冲突的rebase将自动为您完成繁琐的部分。
https://hackernoon.com/fix-conflicts-only-once-with-git-rerere-7d116b2cec67
git config --global rerere.enabled true
要注意的一件事是,如果你错误地解决了一些问题,下次也会自动为你解决问题,你可能没有真正意识到这一点。