我和我的朋友有一个他创建的回购。然后,他创建了一个名为“lexer”的分支,供我们继续使用。
问题在于,虽然他可以在主人和词法分析者之间切换,但它对我来说根本不起作用。
最后我刚开始(rm -rf repo
然后克隆了回购)但是仍然无法检查词法分支?
在新克隆的回购中:
git branch
给出:
$ git branch
* master
git checkout lexer
给出:
$ git checkout lexer
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
我可以结帐原点/词法分析器,但我最终处于分离的HEAD状态?
$ git checkout origin/lexer master
Note: checking out 'origin/lexer'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
我可以通过
推送到词法分支git push origin HEAD:lexer
但是,我真的想把这个烂摊子搞清楚。它是如此奇怪,它适用于他,但不适合我?他说他没有从git repo那里获得任何局部变化......
任何人都有任何线索?
答案 0 :(得分:39)
我猜想你在顶层有一个名为lexer
的目录。由于git checkout
用于切换分支和重置树中的文件,因此可能检测到您没有名为lexer
的分支,但您确实有路径并选择第二种模式。
它适用于你的朋友,因为他已经有一个lexer
分支。
最简单的解决方法可能是使用git branch
创建分支。
git branch --track lexer origin/lexer
应该为你做到这一点。然后,您可以使用git checkout
切换到它。
另一种选择可能是使用--
标志进行git checkout。我没试过,但我认为它应该有效:
git checkout lexer --
当您添加--
时,它之前的单词始终被视为分支/提交/树以及路径后的单词。
答案 1 :(得分:6)
您无法结帐lexer
,因为您在本地存储库中没有分支(当然还有一个名称相同的文件夹)。您只有远程分支' origin / lexer'。
首先,您必须创建本地分支:
git checkout -b lexer origin/lexer
关于这个问题的一个很好的解释:https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
答案 2 :(得分:6)
TLDR:这可能只是一个syntax问题。代替
git checkout origin/mybranch
尝试:
git checkout mybranch
在执行以下命令的情况下,git采取的步骤:
git checkout origin/mybranch
但这不是您想要的!您想要一个名为“ mybranch”的分支。如果只有一个远程服务器具有这样的分支(本地没有什么可混淆的问题),那么git将假定您是这种用法,并为您填写<remote>
:
git checkout -b <branch> --track <remote>/<branch>
如果找不到具有匹配名称的分支,则默认为:
git checkout [--detach] <commit>
分离的HEAD消息进入的位置。
请参见the git checkout docs,并仔细注意<branch>
与<remote>
。
答案 3 :(得分:3)
您进入分离的HEAD状态,因为origin/lexer
是一个远程跟踪分支,因此只读。您只想结帐lexer
,并就此开展工作。然后,当您推送时,origin/lexer
将会更新。
编辑:重读你的问题,我看到你曾试图结帐词法分析器,但最终仍然坚持主人。奇怪的是git checkout
无声地失败了。试试git checkout -t origin/lexer
。
答案 4 :(得分:3)
您可能想要这个:
git checkout -t origin/lexer
来自git手册:
为方便起见,--track不带-b表示创建分支...
和
-t,--track ...创建新分支时,设置“上游”配置... 如果未指定-b选项,则新分支的名称将从远程跟踪分支派生
答案 5 :(得分:1)
另一个猜测:你有一个名字相同的标签,所以
projects = File.read('./_data/projects.json')
projects_file = JSON.parse(projects)
projects_file.each do |project|
File.open("./_projects/#{file_name}.md", 'w+') do |file|
# A bunch of YAML Front-Matter written to file.
end
end
实际上检出了标签,而不是分支
答案 6 :(得分:0)
执行:git checkout origin/lexer master
时,您只需将HEAD
更改为指向remote
分支中的最新提交。这是一个只读分支。
如果您想了解HEAD的内容,请阅读以下内容:
How to move HEAD back to a previous location? (Detached head)
在您的情况下,您只需要执行以下操作:
# Update your local repository with all the remote branches
# --prune = remove all deleted data locally which was removed on the remote
git fetch --all --prune
现在你应该在本地拥有最新的分支。
<强> !!!重要:强>
如果您进行了修改并且没有推送它们,请不要删除本地分支
git branch -D lexer
# don't use the remote simply the branch name
git checkout lexer
现在您有一个本地分支,其名称为lexer,已从远程分支中签出
答案 7 :(得分:-1)
我只是替换命令
aHref
与
$ git checkout v4.9.0
它对我有用。