2015-04-29 143 views
0

说我创建一个回购,它有一个分支称为主。如果其他人购买回购协议并推入新的分支机构B,那么在本地拉入B而不覆盖本地主分支机构的最佳方式是什么?我是否在本地切换到分支B,然后引入更改?我的猜测是,如果我不明确地在本地切换分支,那么如果我从远程分支B引入更改,那么我将用B覆盖本地主分支。这里最好的选择是什么?拉不同的Git分支

+0

在您获得本地存储库中的更改后,您想要执行什么操作? – siegi

+0

您不会*覆盖* master,您将在主分支中创建新的合并提交(如果合并不是快进)。 – Gauthier

回答

1

您可以使用git fetch origin branchBbranchB获取所有提交信息,而无需修改master或工作目录。

如果要将更改应用于master,则可以在master分支上使用git merge FETCH_HEAD合并它们。这将创建一个新的提交,其中包含masterbranchB的所有更改。 FETCH_HEAD是最后一次提交的提交。

2
git fetch origin 
git checkout --track origin/<remote_branch_name> 
3

你可以做一个git fetch origin branchname。 通过执行git pull origin branchname 您可以合并两个分支的更改。安装一个像kdiff3一样的合并工具。 可以整合这两个,按照这个link

0

我想,当你写“[人]推到一个新的分支B”,你的意思是他们推到自己的叉式回购,而不是原来的回购origin

不是从原点获取B相反,你需要从他们的叉获取:

git fetch <url/to/their/fork/repo> B 

您将得到提交一份在其分支机构B,你可以看到远程分支git branch -a。你可以用checkout这个远程分支让你的工作文件反映分支B

如果你愿意,你可以在你提取的同时创建一个本地分支。创建的本地分支的名字来源于一个:后:

git fetch <url/to/their/fork/repo> B:B 

现在,而不是在一个相当长的分支名称运行git checkout,你可以git checkout B

请记住,pull只是fetch + merge,而merge发生在当前检出的分支上。你的猜测是正确的,如果你运行git pullmaster被检出,你将合并被拉的分支的内容到master。尽管这不是真正的覆盖,而是增加了对master的提交。


如果你要使用他们的叉回购更多的时间,你可以将其添加为远程:

git remote add their_fork <url/to/their/fork/repo> 

这个你不需要写他们的整个URL后,您可以使用远程名称改为:

git fetch their_fork B:B