我怎么git reset - 硬起源/我检查过的任何分支?

时间:2012-10-02 20:52:15

标签: git

我正在尝试编写一个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

4 个答案:

答案 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的输出,并决定您想要使用哪个远程分支,或者如果它看到了它不期望的内容就会死掉。