2016-03-29 191 views
3

当我合并origin/branchXbranchY并合并branchXbranchY时,有什么不同?git合并原产地/分支vs合并分支本地

+0

它们可能指向不同的东西,例如如果Git显示你的分支在后面。还要注意你的'origin/branchX'可能不是最新的,例如如果你还没有在一段时间内运行'git fetch'。 – Whymarrh

回答

4

origin/branchX是一个远程跟踪分支,每次执行git fetch时都会从远程存储库中获得更新。另一方面,branchX是这个分支的本地版本。 branchX可能与origin/branchX不同步,这反过来可能与远程存储库上的实际内容不同步。

因此,做合并的差异将取决于branchX各种化身的差异。如果要合并的最新branchX到您branchY那么你应该做到以下几点:

git fetch origin   # update remote tracking branchX 
git checkout branchY  # switch to branchY 
git merge origin/branchX # merge 

如果你想在这个过程中也更新本地branchX,你可以这样做:

git checkout branchX 
git pull origin branchX 
git checkout branchY 
git merge branchX 

但是,您可能需要将本地副本branchX合并到branchY中,而不将任一分支与远程同步。例如,如果对遥控器上的branchX进行了新更改,并且您不想将它们带入branchY,那么这将是一个典型的用例。在这种情况下,您将执行如下合并:

git checkout branchY 
git merge branchX 
1

当合并远程分支时 - 您正在使用其他开发人员应用到它的所有远程更改进行检索,但该远程更改可能尚未存在于本地分支上(尽管没有尚未推送的本地更改到远程分支)

当合并本地分支时,您将本地完成的尚未推送到远程分支的所有更改与其他开发人员已应用于其的远程更改合并,但那可能还没有在你的本地分支上。

  -*-*-* branchX 
*-*-*-*-/-*-*-*-*-* Origin/branchX 

想象这些都是你的本地和远程分支机构,你COMMITED变化两次,你的本地分支,有人增加了5个提交和推到回购,所以你不必在你的本地分支的5千万呢。