存在同名文件时的Git更改分支
我的git repo中有一个名为xyz的文件。巧合的是,我还有一个分支名为xyz。目前我在master上,但我想结帐到分支机构xyz。要使用的命令很简单存在同名文件时的Git更改分支,git,git-branch,git-checkout,Git,Git Branch,Git Checkout,我的git repo中有一个名为xyz的文件。巧合的是,我还有一个分支名为xyz。目前我在master上,但我想结帐到分支机构xyz。要使用的命令很简单 $ git checkout xyz 但这会将文件xyz签出到当前头部。我如何将我的分支更改为分支xyz?你错了。它将签出分支xyz 要签出文件,需要使用命令git checkout--xyz。 Git只允许在没有同名分支的情况下为文件提供快捷方式 有关详细信息,请参见git checkout--help。如(git 1.8.4.3+)所示,
$ git checkout xyz
但这会将文件
xyz
签出到当前头部。我如何将我的分支更改为分支xyz
?你错了。它将签出分支xyz
要签出文件,需要使用命令git checkout--xyz
。
Git只允许在没有同名分支的情况下为文件提供快捷方式
有关详细信息,请参见git checkout--help。如(git 1.8.4.3+)所示,您还可以尝试:
git checkout xyz --
(注:附件)
这将清楚地表明xyz
部分是一个分支或提交,而--
之后的所有内容都必须是一个路径(此处不提供路径)。看
如果您尝试不使用“--
”,则可能有效,也可能无效,如“”:
git签出名称
执行以下操作:
- 如果是本地分支或显式远程分支,请切换到它
- 如果是跟踪路径,请重置它
- 如果是远程分支,请创建跟踪分支并切换到它
--
”可以提供清晰的歧义消除
2019年8月更新,Git 2.23+ 并替换为:
- :意思是即使您有一个文件
,git开关xyz也能工作xyz
- :意思是即使您有分支
,git restore xyz也能工作xyz
另外,正如我在“”中所解释的,没有更多意外的分离头。当VonC的解决方案工作时,我永远记不起语法,因此我通常使用更低技术的解决方案:
$ (cd somedir && git checkout my-branch)
或者,如果您没有任何子目录:
$ (cd .git && git -C .. checkout my-branch)
它更容易记忆,也更有效;-) Git 2.21(2019年第一季度,4年以上)将澄清错误信息并提出建议
“git checkout frotz
”()通过确保“frotz
”不能同时解释为修订和路径,避免了歧义
已更新此安全设置,以检查远程设备中的唯一远程跟踪分支“frotz
”,何时从远程设备创建远程跟踪分支“frotz
”的本地分支
注:当计算机系统试图预测用户打算做什么时,自动纠正细微错误,而不是盲目执行用户明确但可能不正确的输入
参见。(于2019年1月4日合并)
签出
:消除dwim跟踪分支和本地文件的歧义
添加签出dwim后,当满足某些条件时,它仅限于dwim,否则返回默认签出行为
事实证明,倒退可能会令人困惑
转向的条件之一
git checkout frotz
到
是指frotz
不能作为文件存在
但是,当用户期望“git checkout frotz
”创建分支“frotz
”并且碰巧有一个名为“frotz
”的文件时,git的静默还原“frotz
”文件内容没有帮助
这在中报告,甚至用作
我们通常会尝试做正确的事情,但当有多个“正确的事情”要做时,最好让用户自己决定
选中此情况,请用户消除歧义:
- “
”将签出路径“foo”git签出--foo
- “
”将dwim并创建分支“git checkout foo--
”foo
--无猜测。这没用
特殊情况,因为“git checkout--no guess foo--
”将失败。
但它可以被脚本使用
目前的方案包括:
如果存在同名的远程跟踪分支,请勿尝试创建分支
在Git 2.26(2020年第1季度)之前,“如果X
不是本地分支,但可以命名多个远程跟踪分支(即,作为创建相应本地分支的起点),则未正确失败”,这一错误已被纠正
参见(2019年12月30日)作者
(于2020年2月5日合并)
:不在不明确的跟踪分支上还原文件
签字人:Alexandr Miloslavskiy
为便于理解,以下是现有的良好场景:
没有文件“foo
”,没有本地分支“foo
”和单个远程分支“foo
”
git checkout foo
将创建本地分支foo
,请参阅
及
有一个文件“foo
”,没有本地分支“foo
”,还有一个远程分支“foo
”
git checkout foo
将投诉,请参阅
此修补程序可防止出现以下情况:
有一个文件“foo
”,没有本地分支“foo
”和多个远程分支“foo
”
git checkout foo
将成功。。。还原文件的内容foo
李>
也就是说,添加另一个远程设备会突然显著改变行为,这充其量只是一个惊喜,最坏的情况下用户可能不会注意到。
请看,这给了一些现实世界的抱怨
据我所知,fix in()忽略了多个远程设备的情况,而退回到恢复文件的整个行为从来都不是有意的:
- 引入意外行为。
在此之前,存在从not-a-ref到pathspec的回退。这是合理的回退。
之后,还有另一个从远程到pathspec的回退。
我知道这是复制粘贴
git checkout -b frotz origin/frotz
--no-guess: