我可能做错了什么。场景:3台计算机:服务器,笔记本电脑和防火墙机,没有互联网连接。
服务器上有一个git repo,我想在防火墙机上工作,最后将更改传回服务器。
我正在做的事情现在失败了,它是这样的:我使用笔记本电脑,焦油和USB棒作为转移代理,有点像这样
laptop$ git clone http//server/.../project.git
laptop$ tar cvzf project.tar.gz project
然后通过USB将焦油移到防火墙机器上,我这样做:
fwm$ tar xvzf project.tar.gz
fwm$ cd project
fwm$ git branch -a
* master
remotes/origin/x1
remotes/origin/x2
到目前为止,这么好。但是,如果我现在要签出某个分支(例如“x1”),我会收到以下消息:
fwm$ git co x1
error: pathspec 'x1' did not match any file(s) known to git.
我可以尝试通过一条完整的路径强制我的方式,但这似乎也是不稳定的:
fwm$ git co remotes/origin/x1
Note: moving to 'remotes/origin/x1' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
我说“摇摇欲坠”,因为
fwm$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
我做错了什么以及这种情况下的正确方法是什么?
答案 0 :(得分:2)
你没有做错什么,你还没有创建任何本地分支。 <remote-name>/<branch-name>
形式的所有分支都是remote branches,并且在您的情况origin/x1
中应该只反映该远程分支的当前或先前状态。因此你无法对这些分支进行提交(如果你这样做,那么它们将不再在过去的某个时刻反映远程上该分支的状态)所以git只是不允许你实际检查这些分支。而不是将您置于一个称为无头分支的状态,而您可以提交但是如果您切换分支,您的更改将会丢失,因为您没有要引用的分支名称(您可以查找)这些提交虽然在reflog中。
你需要做的就是在解开git存储库后创建一个本地分支来处理,但这可能是git bundle的一个很好的用例