我在我当地的git repo中设置了两个遥控器。一个是我贡献的开源项目的回购,另一个是我的回购分支。
我似乎只能查看我从origin
遥控器下拉的内容。从遥控器抓取分支的常规方法包括
$ git fetch <remote> <branch>
$ git checkout <branch>
但这似乎并不适用于我目前的情况。
$ git fetch my-remote my-branch
remote: Counting objects: 2297, done.
remote: Compressing objects: 100% (1951/1951), done.
remote: Total 2297 (delta 1044), reused 0 (delta 0), pack-reused 50
Receiving objects: 100% (2297/2297), 2.10 MiB | 1.59 MiB/s, done.
Resolving deltas: 100% (1045/1045), done.
From https://github.com/me/my-repo
* branch my-branch -> FETCH_HEAD
* [new branch] my-branch -> origin/my-branch
$ git checkout my-branch
error: pathspec 'my-branch' did not match any file(s) known to git.
此外,当我执行git branch
时,分支不会出现。
这里发生了什么?
答案 0 :(得分:4)
如果您只有一个遥控器(我们称之为origin
),那么当您输入
git checkout foo
当foo
不存在但origin/foo
确实存在时,git的行为就像您输入以下内容一样
git checkout -b foo origin/foo
如果您有多个遥控器,并且foo
在本地不存在但存在于2个或更多遥控器中,则会抑制此行为。
您需要显式创建foo并指示git您想要跟踪的远程/分支。
git checkout -b foo <remote>/foo
答案 1 :(得分:2)
Git 2.19将有所帮助,因为“ git checkout
”和“ git worktree add
”学会了尊重
checkout.defaultRemote
在从
具有多个远程站点的存储库中的远程跟踪分支
具有相同名称的跟踪分支。
请参见commit 8d7b558,commit ad8d510,commit 1c55055,commit 3c87aa9,commit e4d2d55,commit e417151,commit 17b44ae,{{3} }(2018年6月5日)通过commit c8cbf20。
(由Ævar Arnfjörð Bjarmason (avar
)在Junio C Hamano -- gitster
--中合并,2018年8月2日)
注意:commit 50858ed是“按我的意思做”,当计算机系统试图预期用户打算做什么时,它会自动纠正一些小错误,而不是盲目地执行用户的显式但可能不正确的输入。 > 我见过DWIM和Git 2.16 remote format。
结帐和工作树:引入
checkout.defaultRemote
引入一个
checkout.defaultRemote
设置,该设置可用于 当(通过checkout.defaultRemote=origin
指定一个偏爱的遥控器时 运行例如“git checkout master
”表示origin/master
,即使 还有其他具有“master
”分支的遥控器。我想要这个,因为使用此工作流程来结帐 存储库并创建一个主题分支,然后返回到“
master
” 从上游检索:( cd /tmp && rm -rf tbdiff && git clone git@github.com:trast/tbdiff.git && cd tbdiff && git branch -m topic && git checkout master )
这将输出:
Branch 'master' set up to track remote branch 'master' from 'origin'. Switched to a new branch 'master'
但是一旦添加了新的遥控器(例如,只是为了检查某些东西) DWIMery消失了:
( cd /tmp && rm -rf tbdiff && git clone git@github.com:trast/tbdiff.git && cd tbdiff && git branch -m topic && git remote add avar git@github.com:avar/tbdiff.git && git fetch avar && git checkout master )
将输出(不增加本系列前面的建议输出):
error: pathspec 'master' did not match any file(s) known to git.
新的
checkout.defaultRemote
配置使我可以说 出现歧义,我想使用“origin
”,它仍然会 就像我唯一的遥控器是“origin
”一样。
答案 2 :(得分:1)
为此,请将以下行添加到您的gitconfig文件中。(全局git config文件通常位于〜/ .gitconfig中)
[checkout]
defaultRemote=origin