ven*_*nky 47 git git-checkout git-branch
我在我的git repo中有一个名为xyz的文件.巧合的是,我还有一个名为xyz的分支.目前我在掌握,但我想结帐分支xyz.要使用的命令很简单
$ git checkout xyz
Run Code Online (Sandbox Code Playgroud)
但这会将文件签出xyz到当前的HEAD.如何将分支更改为分支xyz?
Von*_*onC 69
如提交a047faf(git 1.8.4.3+)所示,您也可以尝试:
git checkout xyz --
Run Code Online (Sandbox Code Playgroud)
(注意:使用Git 2.21,2019年第一季度,错误信息会更清晰)
这将清楚地表明该xyz部分是分支或提交,而后面的所有内容--必须是路径(这里没有提供路径).有关双连字惯例,请参阅此处.
如果您尝试没有' --',那可能会或可能不会,如" 为什么git checkout <remote_branchname>不创建新的跟踪分支? "中所示:
git checkout name作用:
- 如果是本地分支或显式远程分支,请切换到它.
- 如果它是跟踪路径,请重置它
- 如果它是远程分支,请创建跟踪分支并切换到它.
它的行为并不总是一样的.因此' --'提供明确的消歧.
虽然 VonC 的解决方案有效,但我永远记不起语法,所以我通常使用技术含量较低的解决方案:
$ (cd somedir && git checkout my-branch)
Run Code Online (Sandbox Code Playgroud)
或者,如果您没有任何子目录:
$ (cd .git && git -C .. checkout my-branch)
Run Code Online (Sandbox Code Playgroud)
它更容易记住并且有效;-)
Git 2.21(2019 年第一季度,4 年多后)将澄清错误消息并提出建议
\n“ git checkout frotz”(没有我最初建议的任何双破折号)通过确保 \' frotz\' 不能同时解释为修订版和路径来避免歧义。
此安全性已更新,当dwimmingfrotz从远程的远程跟踪分支创建本地分支时,还可以检查远程中唯一的远程跟踪分支。frotzfrotz
注意:“dwim”(下面使用)是“做我的意思”,当计算机系统试图预测用户打算做什么时,自动纠正微不足道的错误,而不是盲目执行用户明确但可能不正确的输入。
\n请参阅Nguy\xe1\xbb\x85n Th\xc3\xa1i Ng\xe1\xbb\x8dc Duy ( )的提交 be4908f(2018 年 11 月 13 日)。\n (由Junio C Hamano 合并 -- --在提交 8d7f9db中,2019 年 1 月 4 日)pcloudsgitster
\n\n\n
checkout:消除 dwim 跟踪分支和本地文件的歧义
\n\n当在提交 70c9ac2中添加签出 dwim 时,它仅限于在满足某些条件时仅使用 dwim,否则将回退到默认签出行为。
\n事实证明,后退可能会令人困惑。
\n转的条件之一
\nRun Code Online (Sandbox Code Playgroud)\ngit checkout frotz\n到
\nRun Code Online (Sandbox Code Playgroud)\ngit checkout -b frotz origin/frotz\n是
\nfrotz不能作为文件存在。但是,当用户期望“
\ngit checkout frotz”创建分支“frotz”并且恰好有一个名为“frotz”的文件时,git\ 默默地恢复“frotz”文件内容并没有帮助。\n这在Git 邮件列表
中有所报道,甚至在其他地方用作“Git 很糟糕”的示例。我们通常会尝试做正确的事情,但是当有多个“正确的事情”要做时,最好将其留给用户来决定。
\n检查此案例,要求用户消除歧义:
\n\n
\n- “
\ngit checkout -- foo”将检查路径“foo”- "
\ngit checkout foo --" 将 dwim 并创建分支 "foo" 6对于不需要 dwim 的用户,请使用
\n--no-guess. 在这种特殊情况下它是没有用的,因为“git checkout --no-guess foo --”只会失败。
\n但它可以被脚本使用。
目前的手册页git checkout包括:
\n\nRun Code Online (Sandbox Code Playgroud)\n--no-guess:\n如果存在同名的远程跟踪分支,请勿尝试创建分支。
\n
在 Git 2.26(2020 年第一季度)之前,当“ ”不是本地分支但可以命名多个远程跟踪分支git checkout X时,“ ”不会正确失败X(即作为创建相应本地分支的起点),这已被已更正。
请参阅Alexandr Miloslavskiy ( )的提交 fa74180和提交 2957709(2019 年 12 月 30 日)。\n (由Junio C Hamano 合并 -- --在提交 d0e70cd,2020 年 2 月 5 日)SyntevoAlexgitster
\n\n\n
checkout:不要在不明确的跟踪分支上恢复文件签署人:亚历山大·米洛斯拉夫斯基
\n
\n\n为了更容易理解,以下是现有的好的场景:
\n\n
\n- 没有文件\' \',没有本地分支\' \ '和单个远程分支\'
\nfoofoofoo'- \n
git checkout foo将创建本地分支foo,请参阅上面的提交 70c9ac2,此处进行了讨论。和
\n\n
\n- 有一个文件\'
\nfoo\',没有本地分支\'foo\'和单个远程分支\'foo\'- \n
git checkout foo会抱怨,请参阅上面的提交 be4908f此补丁可防止出现以下情况:
\n\n
\n- 有一个文件\'
\nfoo\',没有本地分支\'foo\'和多个远程分支\'foo\'- \n
git checkout foo将成功...恢复文件内容foo!也就是说,添加另一个遥控器会突然显着改变行为,这充其量是一个惊喜,最坏的情况可能会被用户忽视。
\n
\n请参阅上面的提交 be4908f,它给出了一些现实世界的抱怨。据我了解,修复上面的提交 be4908f(此处讨论),忽略了多个遥控器的情况,并且回退到恢复文件的整个行为从来都不是有意的:
\n\n
\n- \n
上面的 commit 70c9ac2引入了意外行为。
\n
\n之前,有从 not-a-ref 到 pathspec 的回退。这是合理的后备。
\n之后,还有另一个从ambiguously-remote 到pathspec 的回退。
\n我知道这是复制粘贴的疏忽。- \n
提交 ad8d510,来自“无法使用多个遥控器进行结账”,并在此处讨论,注意到了意外行为,但选择半记录它而不是禁止,因为补丁系列的目标集中在其他事情上。
\n- \n
\n
die()当分支和文件之间存在歧义时,上面的提交 be4908f会添加。
\n多个跟踪分支的情况似乎被忽视了。新行为:如果没有本地分支和多个远程候选,则不要
\ndie()尝试恢复文件,无论它是否存在(防止意外)或不存在(改进错误消息)。
在 Git 2.30(2021 年第 1 季度)中,“ git checkout” ( man )学会了使用checkout.guess配置变量并相应地启用/禁用其“ --[no-]guess”选项。
请参阅Denton Liu ( )的提交 64f1f58(2020 年 10 月 7 日)和提交 ef09e7d(2020 年 10 月 06 日)。\n (由Junio C Hamano 合并 -- --在提交 0e41cfa中,2020 年 10 月 27 日)Denton-Lgitster
\n\n\n
checkout: 学会尊重checkout.guess签字人:刘丹东
\n
\n\n当前的行为
\ngit checkout/switch是--guess当前默认启用的。
\n但是,某些用户可能不希望这种情况自动发生。
\n不要强迫用户--no-guess每次都手动指定,而是向这些命令传授checkout.guess配置变量,让用户可以选择设置默认行为。指导完成脚本识别新的配置变量,并在其设置为 false 时禁用DWIM逻辑。
\n
git config现在包含在其手册页中:
\n\n\n
checkout.guess为和中的
\n--guess或--no-guess\n选项提供默认值。请参阅\n和。git checkoutgit switchgit switchgit checkout
git checkout现在包含在其手册页中:
\n\n\n
--guess是默认行为。用于--no-guess禁用它。\n
checkout.guess可以通过配置变量设置默认行为。
git switch现在包含在其手册页中:
\n\n\n
checkout.guess可以通过配置变量设置默认行为。
| 归档时间: |
|
| 查看次数: |
8858 次 |
| 最近记录: |