假设我创建了一个repo,它有一个名为master的分支。如果其他人派遣回购并推送到新的分支B,那么我在本地拉入B而不覆盖我的本地主分支的最佳方式是什么?我是否在本地切换到分支B然后引入更改?我的猜测是,如果我没有在本地明确切换分支,那么如果我从远程分支B中提取更改,那么我将用B覆盖我的本地主分支。这里最好的选择是什么?
答案 0 :(得分:3)
你可以git fetch origin branchname
。
通过做git pull origin branchname
您可以合并两个分支的更改。安装像kdiff3这样的合并工具。
您可以将这两者合并,请按照此link
答案 1 :(得分:2)
git fetch origin
git checkout --track origin/<remote_branch_name>
答案 2 :(得分:1)
您可以使用git fetch origin branchB
从[{1}}获取所有提交,而无需修改branchB
或您的工作目录。
如果您要将更改应用于master
,则可以在master
分支上使用git merge FETCH_HEAD
合并这些更改。这会创建一个新提交,其中包含master
和master
的所有更改。 branchB
是最后提交的提交。
答案 3 :(得分:0)
我想当你写'#34; [某人]推送到新的分支B&#34;时,你的意思是他们推送到他们的分支仓库,而不是原始仓库origin
。
不是从原点获取B
,而是需要从他们的fork获取:
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 pull
签出master
时运行,则会将拉出的分支的内容合并到master
。但这并没有真正覆盖,而是向master
添加提交。
如果您打算多次使用他们的fork repo,可以将其添加为远程:
git remote add their_fork <url/to/their/fork/repo>
在此之后,您不需要编写整个URL,而是可以使用远程名称:
git fetch their_fork B:B