我使用Git在笔记本和台式电脑之间同步工作目录:
origin
远程origin
,其中包含裸回购desktop
的远程遥控器,其中包含一份带有工作副本的仓库notebook
的远程控制台,其中包含一份带有工作副本的仓库当我在家工作时,我通过(慢速)VPN连接推送提交到origin
和desktop
。有时候,我在桌面计算机上启动了一个分支,离开了我的工作区,这个分支正在检查并继续在笔记本上工作。到目前为止非常简单。
当我要从笔记本中将更改推回到desktop
计算机时会出现问题:当前分支当前已在{{1}上签出时出现Git push error '[remote rejected] master -> master (branch is currently checked out)'问题}。
为了避免错误,我想事先知道desktop
上当前检出了哪个分支。有没有办法实现这个目标?
是的,当然。我可以等到我回去工作再推,然后在台式机上检查一个不同的分支。每次离开工作场所,我都可以创建一个临时分支。我可以打开一个RDP会话到我的台式机,并检查一个不同的分支。我知道。但这不是我要求的:没有解决方法。
答案 0 :(得分:4)
我怎样才能找出在远程机器上签出的分支?
以下命令
git remote show <remote-name>
打印有关<remote-name>
的所有类型的信息,包括当前检出的分支。如果只想提取分支名称,可以运行以下命令:
git remote show <remote-name> | sed -n 's/ HEAD branch: //p'
(至少,这个命令适用于Git 2.1.3。)
作为奖励,这是别名:
[alias]
remotehead = "!sh -c \"git remote show $1 | sed -n 's/ HEAD branch: //p'\" -"
如果您在~/.gitconfig
文件中添加此别名条目,则应该可以像这样使用
$ git remotehead <remote-name>
答案 1 :(得分:2)
您可以使用git rev-parse
来解析符号引用desktop/HEAD
。
% git rev-parse --symbolic-full-name desktop/HEAD
refs/remotes/desktop/master