当存在同名文件时Git更改分支

时间:2014-08-15 06:50:22

标签: git git-branch git-checkout

我在我的git repo中有一个名为xyz的文件。巧合的是,我还有一个名为xyz的分支。目前我在掌握,但我想结帐分支xyz。要使用的命令很简单

$ git checkout xyz

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

4 个答案:

答案 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 be4908fNguyễ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并创建分支“ foo6
  •   
     

对于不需要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