我有两个分支-develop
和master
,我向它们添加了新的提交,现在我想在master
的基础上重定develop
的基。
等我找到了
git checkout develop
git fetch
git rebase origin/master
它给了我无数的冲突,我几乎无法解释,但如果我这样做
git checkout master
git pull origin HEAD
git checkout develop
git rebase master
它执行正确的变基而没有任何冲突。
有人能解释一下我错过了什么吗?谢谢!
2条答案
按热度按时间8wtpewkr1#
两个可能的点:
git pull
的一个(重要)效果是 * 将本地分支中的更改与拉取的分支合并 *,结果是不同的提交,origin/master
的顶部重新定基,但是拉了HEAD
;如果远程的默认分支是 not master(例如:对于github
存储库,默认分支现在命名为main
),则结果可能不同在终端中运行
git log --oneline --graph HEAD master origin/master
(或者打开一个图形查看器查看您的仓库历史,并检查3个分支HEAD master origin/master
),您将更好地查看包含哪些内容,哪些不包含vxqlmq5t2#
建议在开始任何类型的合并或变基操作之前,始终在分支上执行
git pull
。这样可以确保您的本地分支与远程分支保持最新,并且不会因为其他人同时进行的更改而发生冲突。当你在develop分支上执行
git fetch
和git 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分支,而没有任何冲突。总之,在开始任何变基或合并操作之前,从远程分支中提取最新的更改总是一个好的实践。