【问题标题】:Reset remote git branch to previous pointer in commit tree将远程 git 分支重置为提交树中的前一个指针
【发布时间】:2018-07-04 04:42:13
【问题描述】:

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

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

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

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

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

branch -f release <SHA1> 

如果我推动我得到

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

它告诉我需要快进才能推动。我也试过了

git reset --hard <SHA1>

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

【问题讨论】:

  • push --force 或更好push --force-with-lease
  • 请注意,强制推送是一种破坏性行为,您应该 110% 确定您首先做的是正确的事情。

标签: git bitbucket


【解决方案1】:

下一步是一个简单的git push --force(与您的同事交流,他们将不得不获取然后重置他们自己的master 分支)

请注意这里需要强制租赁,考虑到it interacts badly with any fetch

【讨论】:

    【解决方案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 存储库中访问 Setting -&gt; Branch permissions -&gt; Edit branch permission (little pencil icon) -&gt; Check "Allow rewriting branch history" -&gt; Save

    这解决了权限问题。

    【讨论】:

    • 很好的反馈,这确实完成了我的回答。+1
    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 2020-07-29
    • 2018-02-28
    • 1970-01-01
    • 2020-03-01
    • 2014-09-10
    • 1970-01-01
    • 2013-05-03
    相关资源
    最近更新 更多