存在相同名称的文件时,Git更改分支

我的git仓库中有一个名为xyz的文件。 巧合的是,我还有一个名为xyz的分支。 目前,我在master上,但是我想结帐到xyz分支。 使用的命令很简单

$ git checkout xyz

但这会将文件xyz签出到当前的HEAD。 如何将分支更改为分支xyz

venky asked 2020-07-25T18:26:35Z
4个解决方案
65 votes

如commit a047faf(git 1.8.4.3+)所示,您也可以尝试:

git checkout xyz --

(注意:Git 2.21,Q1 2019将更清楚错误消息)

可以清楚地看出--部分是分支或提交,而--之后的所有内容都必须是路径(此处未提供路径)。 有关双连字符约定,请参见此处。

如果您尝试不使用“ --”,则可能会或可能不会工作,如“为什么git checkout --为什么不创建新的跟踪分支?”所示:

--执行以下操作:

  • 如果是本地分支或显式远程分支,请切换到该分支。
  • 如果是跟踪路径,请重置它
  • 如果是远程分支,请创建一个跟踪分支并切换到该分支。

而且它的行为并不总是相同的。 因此,“ --”提供了明确的歧义。

VonC answered 2020-07-25T18:27:25Z
2 votes

尽管VonC的解决方案有效,但我永远都记不住语法,因此我通常使用技术含量较低的解决方案:

$ (cd somedir && git checkout my-branch)

或者,如果您没有任何子目录:

$ (cd .git && git -C .. checkout my-branch)

更容易记住并且有效;-)

Martin Tournoij answered 2020-07-25T18:27:54Z
0 votes

Git 2.21(Q1 2019,4+年后)将澄清错误消息并提出建议

“ 2982384853796296216”(我最初建议不要使用双破折号)通过确保“ frotz”不能同时解释为修订版和路径来避免歧义。

此安全性已更新,可以在从远程的远程跟踪分支“ git checkout --no-guess foo --”中创建本地分支“ 29823848538130360360”时,在远程服务器上同时检查其唯一的远程跟踪分支“ frotz”。

注意:“ dwim”(在下面使用)是“按照我的意思做”,当计算机系统试图预测用户的意图时,它会自动纠正一些琐碎的错误,而不是盲目地执行用户的显式但可能不正确的输入。

参见Nguyen Thai Ngoc Duy(--no-guess: )的commit be4908f(2018年11月13日)。
(由Junio C Hamano合并---no-guess: -在commit 8d7f9db中,2019年1月4日)

--no-guess: :消除歧义的dwim跟踪分支和本地文件

在提交70c9ac2中添加了checkout dwim时,仅当满足某些条件时,才将其限制为dwim,否则将恢复为默认的checkout行为。

事实证明,回退可能会造成混淆。

转向的条件之一

--no-guess:

--no-guess:

--no-guess: 不能作为文件存在。

但是,当用户期望“ --no-guess: ”创建分支“ git checkout --no-guess foo --”并且碰巧有一个名为“ frotz”的文件时,git默默地还原“ --no-guess: ”文件内容是没有帮助的。
这是在Git邮件列表中报告的,甚至在其他地方也被用作“ Git不好”的示例。

我们通常尝试做正确的事情,但是当有多个“正确的事情”要做时,最好由用户决定。

检查这种情况,请用户消除歧义:

  • --no-guess: ”将检出路径“ foo”
  • --no-guess: ”将dwim并创建分支“ git checkout --no-guess foo --” 6

对于不希望使用dwim的用户,请使用--no-guess: 。 特殊情况是因为“ git checkout --no-guess foo --”将失败。
但是它可以被脚本使用。

--no-guess: 的手册页现在包括:

--no-guess:

如果存在相同名称的远程跟踪分支,请勿尝试创建分支。

VonC answered 2020-07-25T18:29:48Z
-3 votes

你错了。 它将结帐xyz分支。

要签出文件,您需要使用命令git checkout --help。如果没有相同名称的分支,Git仅允许您使用文件的快捷方式。

有关详细信息,请参见git checkout --help

Alexey Ten answered 2020-07-25T18:30:17Z
translate from https://stackoverflow.com:/questions/25322335/git-change-branch-when-file-of-same-name-is-present