4

我正在尝试编写一个 git 部署脚本,但该脚本必须更新多个服务器,并且它们并不都在同一个 Git 分支上。理想情况下,脚本应该只需要一个命令,即“git reset --hard origin/whateverBranchThisServerIsOn”。

现在,我明白我可以做到:

git reset --hard origin/foo

将我的 git 环境重置为远程 foo 分支。但是,我想做的是重置为远程分支,而不是具体的“foo”,只是“机器当前已签出的任何分支的远程(即,当你这样做时会出现什么分支git branch”。

我试过了:

git reset --hard origin

和:

git reset --hard origin/HEAD

和:

git reset --hard HEAD

但他们要么检查其他分支,要么(在最后一种情况下)没有得到远程提交。肯定有什么说法git reset --hard origin/CURRENT_BRANCH吗?

4

4 回答 4

6

“我已经签出的分支”的想法有点畸形。这样的分支之间没有 1:1 的关系。您的分支可能根本没有“起源”。但它可以有一个远程跟踪分支,它可能(或可能不)与您所在的分支同名。阅读man gitrevisions,它看起来指定HEAD@{upstream}应该可以做你想做的事。但我没有测试过。

于 2012-10-02T22:55:24.503 回答
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
于 2015-02-19T09:05:10.383 回答
3
git rev-parse --abbrev-ref HEAD | xargs -I {} git reset --hard origin/{}

为我工作,虽然有点长

于 2021-03-18T14:07:03.383 回答
0

“无论您当前已签出的任何内容”都以名称命名HEAD。因此,git reset --hard HEAD将恢复您在开始进行修改之前签出的任何内容,而您现在已经决定不想保留...

由于您当前所在的分支可能有也可能没有上游等价物,我不确定是否有一个命令可以盲目地实现您所描述的内容。您可以编写一些 shell 脚本来解析输出git branch并决定您想要在哪个远程分支上,或者如果它看到它不期望的东西就死掉。

于 2012-10-02T21:55:25.927 回答