我在我的git repo中有一个名为xyz的文件。巧合的是,我还有一个名为xyz的分支。目前我在掌握,但我想结帐分支xyz。要使用的命令很简单
$ git checkout xyz
但这会将文件xyz
签出到当前的HEAD。如何将分支更改为分支xyz
?
答案 0 :(得分:51)
如commit a047faf(git 1.8.4.3+)所示,您也可以尝试:
git checkout xyz --
(注:error message will be clearer with Git 2.21, Q1 2019)
这将表明xyz
部分是分支或提交,而--
之后的所有内容必须是路径(此处未提供路径)。请参阅more here on the double-hyphen convention。
如果您尝试不使用“--
”,那可能会或可能不会起作用,如“Why does git checkout <remote_branchname>
not create new tracking branch?”所示:
git checkout name
:
- 如果是本地分支或显式远程分支,请切换到它。
- 如果是跟踪路径,请将其重置
- 如果是远程分支,请创建跟踪分支并切换到它。
它的行为并不总是一样的。因此,“--
”可以明确消除歧义。
答案 1 :(得分:2)
虽然VonC的解决方案有效,但我永远都不记得语法,所以我通常使用技术含量较低的解决方案:
$ (cd somedir && git checkout my-branch)
或者,如果您没有任何子目录:
$ (cd .git && git -C .. checkout my-branch)
更容易记住并且有效;-)
答案 2 :(得分:0)
Git 2.21(2019年第一季度,超过4年后)将澄清错误消息并提出建议
“ git checkout frotz
”(without any double-dash that I suggested initially)通过确保“ frotz
”不能同时解释为修订版和路径来避免歧义
此安全性已更新,可以在远程dwimming从远程创建本地分支“ frotz
”时检查远程中唯一的远程跟踪分支“ frotz
”远程跟踪分支“ frotz
”。
注意:"dwim" (used below) is "do what I mean",当计算机系统试图预期用户打算做什么时,将自动纠正一些琐碎的错误,而不是盲目地执行用户的显式但可能不正确的输入。
请参见commit be4908f的Nguyễn Thái Ngọc Duy (pclouds
)(2018年11月13日)。
(由Junio C Hamano -- gitster
--在commit 8d7f9db中合并,2019年1月4日)
checkout
:消除dwim跟踪分支和本地文件的歧义在commit 70c9ac2中添加了checkout dwim时,仅当满足某些条件时,才将其限制为dwim,否则将恢复为默认的checkout行为。
事实证明,回退可能会造成混淆。
要转向的条件之一
git checkout frotz
到
git checkout -b frotz origin/frotz
是
frotz
不能作为文件存在。但是,当用户期望“
git checkout frotz
”创建分支“frotz
”时,恰好有一个名为“frotz
”的文件, git会自动恢复“frotz
”文件内容没有帮助。
这在Git mailing list中进行了报道,甚至被用作an example of "Git is bad" elsewhere。我们通常尝试做正确的事情,但是当有多个“正确的事情”要做时,最好由用户决定。
检查这种情况,请用户消除歧义:
- “
git checkout -- foo
”将检出路径“ foo”- “
git checkout foo --
”将dwim并创建分支“foo
” 6对于不需要dwim的用户,请使用
--no-guess
。这没用 特殊情况,因为“git checkout --no-guess foo --
”将失败。
但是脚本可以使用它。
man page for git checkout
现在包括:
--no-guess:
如果存在相同名称的远程跟踪分支,请勿尝试创建分支。
答案 3 :(得分:-3)
你错了。它将结帐分支xyz。
要签出文件,您需要使用命令git checkout -- xyz
。
如果没有相同名称的分支,Git只允许您使用文件的快捷方式。
有关详细信息,请参阅git checkout --help
。