在前一次Git合并后,Git重新定址

wz1wpwve  于 2022-09-21  发布在  Git
关注(0)|答案(5)|浏览(180)

我有以下情况:

  • 我从主库(X)创建了一个clone(Y),因为有很多人在Y上工作,我们没有做任何rebase,而只做了merge。当我们想要将(push)Y交付给X时,我们想要做一个rebase,以便让东西变得漂亮和干净

问题是,在执行rebase时,我们被要求执行前面merge步骤中已经完成的所有合并。除了重新进行合并之外,有没有解决这个问题的办法?

我预计这会非常简单,因为我们已经解决了相互冲突的合并。

72qzrwbm

72qzrwbm1#

在进行了大量工作和多次合并之后,git merge --squash现在是我首选的重新基址方式(请参见此答案)。如果您正在处理的分支名为my-branch,并且您想要从master重新基址,则只需执行以下操作:

  1. git checkout my-branch
  2. git branch -m my-branch-old
  3. git checkout main
  4. git checkout -b my-branch
  5. git merge --squash my-branch-old
  6. git commit
bhmjp9jg

bhmjp9jg2#

改变基数以获得“干净”的历史被高估了。如果您想保存历史,最好的方法就是进行合并,而不是重新基址。这样,如果您需要返回到某个修订版,它将与您在开发期间测试的版本“完全”相同。这也解决了有关先前解决的合并冲突的问题。

如果您不关心保存历史,您可以从master创建一个新的分支, checkout 它,然后执行git read-tree -u -m dev来更新您的工作树以匹配dev分支。然后,您可以将所有内容提交到一个大提交中,并像往常一样将其合并到master中。

oyxsuwqo

oyxsuwqo3#

两句话:

  • 您可以在新获取的提交之上重新设置您自己的(尚未推送的)工作的基数,任意次数。
  • 如果您有activated git rerere,则可以避免合并冲突(在rebase期间),这是针对这种情况所做的。

git rerere查看更多信息。

xeufq47z

xeufq47z4#

您可以采用分支中的所有更改,并将它们放入master中的新提交中,具体如下:

  1. git diff master > my_branch.patch
  2. git checkout master
  3. patch -p1 < my_branch.patch

然后暂存您的文件并提交。

qlfbtfca

qlfbtfca5#

关于合并冲突的重播,您可以使用git rerere维护一个关于合并冲突已被解决的数据库,以便执行导致相同冲突的rebase将自动为您完成费力的部分。

https://hackernoon.com/fix-conflicts-only-once-with-git-rerere-7d116b2cec67

git config --global rerere.enabled true

要注意的一件事是,如果你解决了某件事不正确,下次它也会自动帮你解决,而你可能没有真正意识到这一点。

更多正式文档,请访问:https://git-scm.com/docs/git-rerere

相关问题