将远程git分支重置为提交树中的上一个指针

时间:2018-01-25 01:30:41

标签: git bitbucket

我需要更改远程git分支以指向提交树中的先前提交。

我有四个分支:master,ui,test,release。 Master和UI是经常合并的并行开发分支。测试和发布分支指向master上的先前提交。

一个同事搞砸了(不要问)并做了:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id='cancelForm'>
Cancel!
</button>

现在我的任务是修复它。我的googlefu让我失望了,虽然我可以将发布分支修复回我在本地仓库中的状态,但我无法弄清楚如何将更改推送到远程服务器(原点)。由于master和ui之间的所有合并,我无法恢复。我试过了

git checkout release
git reset --hard origin/ui
git push

如果我推动我

branch -f release <SHA1> 

它告诉我在推进之前我需要快进。我也试过

! [rejected]  release -> release (non-fast-forward)

具有相同的结果。我找到了许多关于删除以前提交到远程存储库的帮助,但是我没有找到关于如何在提交树上向后移动指针的指示。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

下一步是一个简单的git push --force(向你的同事传达拳头,他们必须获取然后重置他们自己的master分支)

请注意,此处需要使用强制租赁,考虑it interacts badly with any fetch

答案 1 :(得分:2)

问题的答案是git push --force,这就是我将其标记为答案的原因。但在我的情况下还有一个额外的步骤。强行推进bitbucket我得到了错误:

remote: permission denied to force push branch release
To https://user@bitbucket.org/user/repo.git
 ! [remote rejected] release-> release (pre-receive hook declined)
error: failed to push some refs to 'https://user@bitbucket.org/user/repo.git'

(出于某种原因,我第一次错过阅读“拒绝许可”这一行。)

要解决这个问题,在bitbucket repo中你需要去 Setting -> Branch permissions -> Edit branch permission (little pencil icon) -> Check "Allow rewriting branch history" -> Save

这解决了权限问题。