在分支上执行Git获取和拉取操作
以前可能有人问过这个问题,但我找不到答案 假设以下场景 我有一个具有以下本地分支的本地存储库在分支上执行Git获取和拉取操作,git,branch,fetch,pull,Git,Branch,Fetch,Pull,以前可能有人问过这个问题,但我找不到答案 假设以下场景 我有一个具有以下本地分支的本地存储库 Scenario 1 local Branch A Branch B Branch C (not reachable from A or B) 如果我在分支A上执行拉操作,我是否会隐式地为B和C执行抓取操作?在pull操作中执行的fetch与仅仅执行fetch不同吗 如果我在C上取头,我在A和B上取头吗 场景二只有分支A在本地签出怎么办 Scenario 2 local
Scenario 1
local
Branch A
Branch B
Branch C (not reachable from A or B)
如果我在分支A上执行拉操作,我是否会隐式地为B和C执行抓取操作?在pull操作中执行的fetch与仅仅执行fetch不同吗
如果我在C上取头,我在A和B上取头吗
场景二只有分支A在本地签出怎么办
Scenario 2
local
Branch A
Remote
Branch A
Branch B
Branch C (not reachable from A or B)
- 您对这两种情况的描述(以及两者之间的区别)并不十分清楚,因为如果远程设备有一些分支名称
、A
和B
,它将始终存在于您的本地回购协议以及C
、origin/A
和origin/B
,(使用origin/C
或git fetch
更新远程后),无论是否在本地签出分支git pull
用于从远程获取更新的提交列表。fetch
作为fetch
操作的第一个命令完成 通常的语法是pull
refspec参数是可选的。如果指定失败,git将从远程提取所有ref。通过refs,它将包括refspec中所有可到达的头和标记git fetch
- 不带任何refspec的
命令将从远程引入所有ref,而NOT只是与您当前要合并到的本地分支相对应的提交git pull
- 在场景1中,如果在当前签出分支
时运行a
,那么git将在本地repo中更新git pull origin
、origin/a
和origin/B
。此外,它将origin/C
合并到origin/a
a
- 在场景1中,如果运行
,则只有本地回购中的git fetch origin C
将得到更新。由于此origin/C
,也不会有任何合并fetch
- 场景2将产生与场景1相同的结果。远程的所有REF都将更新到本地回购的
分支。事实上,场景2与场景1没有什么不同,只是您签出的本地分支较少,这对于/BLAH
提取操作来说应该没有任何影响。
做了一些与您可能期望它做的不同的事情git pull origin
- git将
的提交从远程引入
而不是FETCH\u HEAD
origin/
- 它不会更新
origin/
- 它将
合并到当前签出的分支中,因此就本地分支状态而言,可以获得类似的最终结果FETCH_HEAD
- git将
的行为与上述的git-fetch-origin
非常相似,不同的是它只是将git-pull-origin
的提交从远程引入fetch\u HEAD
- 如果确实要仅获取与特定分支对应的提交,则需要使用正确的refspec参数。请阅读有关它的详细信息。要仅从远程
和分支源
获取提交,正确的命令为:主
git pull origin refs/heads/master:refs/remotes/origin/master
- 您还可以将refspecs与
一起使用,仅将提交提取到fetch
,而不合并到本地分支中:origin/master
git fetch origin refs/heads/master:refs/remotes/origin/master
- 如果您不想为
键入长refspec,并且不介意从远程获取有关所有ref的信息,并且没有远程跟踪分支集,则可以执行以下操作:git pull
git fetch origin git checkout <BRANCH-THAT-NEEDS-TO-BE-MERGED-INTO> git merge origin/<BRANCH-TO-BE-MERGED-FROM>
- 您对这两种情况的描述(以及两者之间的区别)并不十分清楚,因为如果远程设备有一些分支名称
、A
和B
,它将始终存在于您的本地回购协议以及C
、origin/A
和origin/B
,(使用origin/C
或git fetch
更新远程后),无论是否在本地签出分支git pull
用于从远程获取更新的提交列表。fetch
作为fetch
操作的第一个命令完成 通常的语法是pull
refspec参数是可选的。如果指定失败,git将从远程提取所有ref。通过refs,它将包括refspec中所有可到达的头和标记git fetch
- 不带任何refspec的
命令将从远程引入所有ref,而NOT只是与您当前要合并到的本地分支相对应的提交git pull
- 在场景1中,如果在当前签出分支
时运行a
,那么git将在本地repo中更新git pull origin
、origin/a
和origin/B
。此外,它将origin/C
合并到origin/a
a
- 在场景1中,如果运行
,则只有本地回购中的git fetch origin C
将得到更新。由于此origin/C
,也不会有任何合并fetch
- 场景2将产生与场景1相同的结果。远程的所有REF将更新到本地回购的
分支。事实上,场景2与场景1没有什么不同,只是您的本地bra较少/BLAH
72a90cf95456b14630ddff427c3df1b00be24670 branch 'master' of git://github.com/foo/bar.git
- 您对这两种情况的描述(以及两者之间的区别)并不十分清楚,因为如果远程设备有一些分支名称