我正在尝试编写一个git部署脚本,但该脚本必须更新多个服务器,并且它们并非都在同一个Git分支上。理想情况下,脚本应该只需要一个命令,效果为“git reset --hard origin / whateverBranchThisServerIsOn”。
现在,我明白我能做到:
git reset --hard origin/foo
将我的git环境重置为远程foo分支。但是,我想做的是重置为远程分支,但不是“foo”具体,只是“机器当前已检出的任何分支的远程(即,当你执行{{1}时显示的分支}”。
我试过了:
git branch
和
git reset --hard origin
和
git reset --hard origin/HEAD
但是他们要么签出其他分支,要么(在最后一种情况下)没有得到远程提交。当然有一些方法可以说git reset --hard HEAD
?
答案 0 :(得分:5)
“我已经检查过的分支”的想法有点格格不入。这样的分支之间没有1:1的关系。您的分支可能根本没有“原产地”。但它可以有一个远程跟踪分支,可能(或可能不)与您所在的分支具有相同的名称。阅读man gitrevisions
,看起来指定HEAD@{upstream}
应该可以做你想做的事情。但我还没有测试过它。
答案 1 :(得分:3)
# simple script to reset hard to the current branch origin
branch=$(git symbolic-ref --short -q HEAD)
echo "Sure to reset hard to origin/$branch ?"
read
git reset --hard origin/$branch
答案 2 :(得分:3)
git rev-parse --abbrev-ref HEAD | xargs -I {} git reset --hard origin/{}
对我有用,虽然有点长
答案 3 :(得分:0)
“无论您目前检查了什么”都使用名称HEAD
。因此,git reset --hard HEAD
会将您恢复为您在开始进行修改之前检查过的任何内容,而您现在已经决定不再保留这些修改...
由于您当前所在的分支可能有也可能没有上游等价物,但我不确定是否只有一个命令可以盲目地实现您所描述的内容。您可以编写一些shell脚本来解析git branch
的输出,并决定您想要使用哪个远程分支,或者如果它看到了它不期望的内容就会死掉。