我需要更改远程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)
具有相同的结果。我找到了许多关于删除以前提交到远程存储库的帮助,但是我没有找到关于如何在提交树上向后移动指针的指示。任何帮助将不胜感激。
答案 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
这解决了权限问题。