Git rebase在远程分支上产生冲突,但在本地分支上有效

szqfcxe2  于 2023-05-27  发布在  Git
关注(0)|答案(2)|浏览(281)

我有两个分支-developmaster,我向它们添加了新的提交,现在我想在master的基础上重定develop的基。
等我找到了

git checkout develop
git fetch
git rebase origin/master

它给了我无数的冲突,我几乎无法解释,但如果我这样做

git checkout master
git pull origin HEAD
git checkout develop
git rebase master

它执行正确的变基而没有任何冲突。
有人能解释一下我错过了什么吗?谢谢!

8wtpewkr

8wtpewkr1#

两个可能的点:

  • git pull的一个(重要)效果是 * 将本地分支中的更改与拉取的分支合并 *,结果是不同的提交,
  • 你在origin/master的顶部重新定基,但是拉了HEAD;如果远程的默认分支是 not master(例如:对于github存储库,默认分支现在命名为main),则结果可能不同

在终端中运行git log --oneline --graph HEAD master origin/master(或者打开一个图形查看器查看您的仓库历史,并检查3个分支HEAD master origin/master),您将更好地查看包含哪些内容,哪些不包含

vxqlmq5t

vxqlmq5t2#

建议在开始任何类型的合并或变基操作之前,始终在分支上执行git pull。这样可以确保您的本地分支与远程分支保持最新,并且不会因为其他人同时进行的更改而发生冲突。
当你在develop分支上执行git fetchgit rebase origin/master时,它从远程master分支获取最新的更改,但不会将这些更改应用到本地master分支。因此,当你试图在origin/master之上重定基develop时,它必须解决由于本地master分支和远程master分支之间的差异而产生的冲突。
另一方面,当您在master分支上执行git pull origin HEAD时,它会使用远程master分支的最新更改更新本地master分支。因此,当您执行git checkout develop,然后执行git rebase master时,它能够干净地将master分支上的更改应用到develop分支,而没有任何冲突。
总之,在开始任何变基或合并操作之前,从远程分支中提取最新的更改总是一个好的实践。

相关问题