我在我当地的git repo中设置了两个遥控器.一个是我正在贡献的开源项目的回购,另一个是我的回购分支.
看来我只能查看我从origin遥控器下拉的东西.从遥控器抓取分支的常规方法包括
$ git fetch <remote> <branch>
$ git checkout <branch>
Run Code Online (Sandbox Code Playgroud)
但这在我目前的情况下似乎不起作用.
$ 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.
Run Code Online (Sandbox Code Playgroud)
此外,当我这样做时,分支不会出现git branch.
这里发生了什么?
当您只有一个遥控器(叫它origin)时,然后键入
git checkout foo
当foo不存在但origin/foo确实存在时,git的行为就像您键入以下命令一样
git checkout -b foo origin/foo
如果您有多个远程控制器,并且foo在本地不存在,但是存在于2个或多个远程控制器中,则将抑制此行为。
您将需要显式创建foo并指示git您希望其跟踪的远程/分支。
git checkout -b foo <remote>/foo
Git 2.19 会有所帮助,因为“ git checkout” 和“ git worktree add” 学会
checkout.defaultRemote了在从远程跟踪分支中自动激活本地分支时使用多个远程跟踪分支,这些远程跟踪分支共享相同的名称。
见提交8d7b558,提交ad8d510,提交1c55055,提交3c87aa9,提交e4d2d55,提交e417151,提交17b44ae,提交c8cbf20(2018年6月5日)由ÆvarArnfjörðBjarmason( )avar。
(由Junio C gitsterHamano合并-- --在提交 50858ed,2018 年 8 月 2 日)
注意:DWIM是“按我的意思做”,当计算机系统尝试预测用户打算做什么时,会自动纠正琐碎的错误,而不是盲目地执行用户明确但可能不正确的输入。
我已经看到了Git 2.16 远程格式和Git 2.13 结帐完成。
结帐和工作树:介绍
checkout.defaultRemote
引入一个
checkout.defaultRemote设置,该设置可用于指定一个遥控器checkout.defaultRemote=origin在运行时更喜欢(通过),例如“git checkout master”表示意思origin/master,即使其他遥控器具有“master”分支。我想要这个,因为使用这个工作流来检出存储库并创建一个主题分支,然后回到
master从上游检索到的“ ”非常方便:Run Code Online (Sandbox Code Playgroud)( cd /tmp && rm -rf tbdiff && git clone git@github.com:trast/tbdiff.git && cd tbdiff && git branch -m topic && git checkout master)
这将输出:
Run Code Online (Sandbox Code Playgroud)Branch 'master' set up to track remote branch 'master' from 'origin'. Switched to a new branch 'master'但是一旦添加了新的遥控器(例如只是为了检查其他人的东西),DWIMery 就会消失:
Run Code Online (Sandbox Code Playgroud)( 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)
将输出(没有本系列前面添加的建议输出):
Run Code Online (Sandbox Code Playgroud)error: pathspec 'master' did not match any file(s) known to git.新
checkout.defaultRemote配置允许我说,每当出现这种歧义时,我更喜欢“origin”,它仍然可以工作,就好像我唯一的遥控器是“origin”一样。
Run Code Online (Sandbox Code Playgroud)git config --add checkout.defaultRemote origin(
--global如果要全局设置,请添加)
小智 8
为此,请将以下行添加到您的 gitconfig 文件中。(全局 git 配置文件通常位于 ~/.gitconfig)
[checkout]
defaultRemote=origin
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |