我正在尝试写一个git部署脚本,但是这个脚本需要更新几个服务器,而且它们并不在同一个Git分支上。理想情况下,这个脚本只需要一个命令,效果是“git reset --hard origin/whateverBranchThisServerIsOn”。
现在,我明白了我能做的:
git reset --hard origin/foo
将我的git环境重置到远程foo分支。然而,我想做的是重置到一个远程分支,而不是具体的“foo”,只是“机器当前 checkout 的任何分支的远程(即,当你执行git branch
时显示的分支)“。
我试过了:
git reset --hard origin
以及:
git reset --hard origin/HEAD
以及:
git reset --hard HEAD
但是它们要么都 checkout 其他分支,要么(在最后一种情况下)都没有得到远程提交。
5条答案
按热度按时间1cklez4t1#
“我已经 checkout 的分支”的概念有点畸形。分支之间没有1:1的关系。你的分支可能根本没有“起源”。但是它可以有一个远程跟踪分支,它可能(也可能不)与你所在的分支同名。阅读
man gitrevisions
,它看起来指定HEAD@{upstream}
应该可以做你想要的事情。但是我还没有测试过它。7lrncoxx2#
8ulbf1ek3#
对我很有效,虽然有点长
uqjltbpv4#
如果您使用的是非常棒的oh my zsh-它已经附带了一个别名
groh
,它可以完成以下任务:myss37ts5#
“您当前 checkout 的内容”的名称为
HEAD
。因此,git reset --hard HEAD
会将您恢复到您开始修改之前 checkout 的内容,而您现在决定不保留这些内容...由于您当前所在的分支可能有也可能没有一个与之对应的上游分支,我不确定是否有一个命令可以盲目地实现您所描述的内容。您可以编写一个shell脚本,解析
git branch
的输出,并决定您要在哪个远程分支上运行,或者如果它看到了它不希望看到的内容,则会死亡。