git 我如何重置-硬原点/我已检出的任何分支?

hgqdbh6s  于 2022-11-20  发布在  Git
关注(0)|答案(5)|浏览(169)

我正在尝试写一个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 其他分支,要么(在最后一种情况下)都没有得到远程提交。

1cklez4t

1cklez4t1#

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

7lrncoxx

7lrncoxx2#

# 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
8ulbf1ek

8ulbf1ek3#

git rev-parse --abbrev-ref HEAD | xargs -I {} git reset --hard origin/{}

对我很有效,虽然有点长

uqjltbpv

uqjltbpv4#

如果您使用的是非常棒的oh my zsh-它已经附带了一个别名groh,它可以完成以下任务:

groh='git reset origin/$(git_current_branch) --hard'
myss37ts

myss37ts5#

“您当前 checkout 的内容”的名称为HEAD。因此,git reset --hard HEAD会将您恢复到您开始修改之前 checkout 的内容,而您现在决定不保留这些内容...
由于您当前所在的分支可能有也可能没有一个与之对应的上游分支,我不确定是否有一个命令可以盲目地实现您所描述的内容。您可以编写一个shell脚本,解析git branch的输出,并决定您要在哪个远程分支上运行,或者如果它看到了它不希望看到的内容,则会死亡。

相关问题