1

我的领导说要将问题合并到主分支中,首先我应该

git fetch
git checkout main-branch
git reset --hard origin/main-branch # ???
git checkout my-branch
git merge main-branch

这似乎正确地快进合并我的本地主分支以匹配原点。为什么是这样?难道不应该

git merge origin/main-branch

或者

git pull origin main-branch

有什么区别?

4

2 回答 2

3

git fetch将更新您的远程分支以在其中包含所有新提交。所以后面origin/main-branch会更新。因此,当您切换到本地main-branch并重置到远程分支时,您现在正在将本地分支重置为远程更新的分支。

通常,您会使用git pullonmain-branch来获得此效果。这还有一个巨大的好处,即如果您有一些本地提交未包含在远程分支中,它们将自动合并。所以,小心使用reset --hard会导致提交丢失。

顺便提一句。git pull本质上与git fetch后跟 a相同git merge,所以两者都可以。git fetch如果您有多个要更新的远程分支,手动运行会有所帮助(git fetch默认情况下会获取所有远程分支)。

另一个非常安全的选择是使用git pull --ff-only. 这是我在更新本地分支时通常会做的事情,我不希望有任何本地提交。如果你碰巧有一个不属于远程分支的本地提交,它会给你一个警告并且不会合并任何东西。因此,您可以首先弄清楚提交的来源,并查看例如您是否不小心提交到错误的分支或其他东西。

于 2013-06-03T19:48:07.850 回答
0

组合

git fetch
git checkout main-branch
git merge origin/main-branch

基本上与

git checkout main-branch
git pull

所以这看起来确实比git reset --hard origin/main-branch, 它只是丢弃任何本地提交要好得多。

以下

git checkout my-branch
git merge main-branch

合并从主分支到我的分支的更改。

要“将问题合并到主分支”,您应该这样做(假设问题已解决my-branch

git checkout main-branch
git merge my-branch
于 2013-06-03T19:51:14.327 回答