使用git reset进行合并

时间:2013-06-03 19:43:12

标签: git

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

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

有什么区别?

2 个答案:

答案 0 :(得分:2)

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

通常,您会在git pull上使用main-branch来获得此效果。这也有很大的好处,如果您有一些未包含在远程分支上的本地提交,它们将自动合并。因此,要小心因为使用reset --hard会导致提交丢失。

顺便说一下。 git pull基本上与git fetch后跟git merge相同,所以要么很好。如果您想要更新多个远程分支,则手动运行git fetch会有所帮助(因为git fetch默认情况下会抓取所有远程分支)。

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

答案 1 :(得分: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