如何在git中提交新的master

时间:2017-10-19 06:59:36

标签: git gitlab

当master指向最后一次提交时,我有一个由几次提交组成的repo。

  

v1 - v2 - v3 - v4

              |
              V
            master 

想要将示例v2设置为新主控

  

v1 - v2 - v3 - v4

    |
    V
  master

但尚未找到有效的解决方案。

p.s。:这不是How to revert Git repository to a previous commit?的副本,因为我

  1. 不想临时切换到另一个提交
  2. 不要删除未发布的提交
  3. 使用新提交撤消已发布的提交
  4. 我不想还原
  5. 如上所述,我只想让旧版本/ commit成为新的主人

2 个答案:

答案 0 :(得分:2)

您可以将当前分支设置为reset --hard 的任何提交(抛弃当前更改!)。如果要更改服务器版本,则必须将其推送(使用--force或--force-with-lease)。 这会重写服务器的历史记录。小心!

git checkout master
git reset --hard {TARGET COMMIT}

git push --force-with-lease

如果您想将当前版本保留为v4,请在重置之前创建指向该版本的分支或标记;

git branch releases/v4

如果由于服务器配置而无法强行推送 - 您必须更改服务器配置以允许强制推送。

如果要撤消v4和v3的更改,您还可以还原更改(这意味着将更改撤消为新提交)请检查此链接Revert multiple git commits

答案 1 :(得分:0)

由于GitLab上的存储库(在您的情况下)阻止强制推送主服务器,因此您无法像@Console建议的那样执行它 - 这是正确的方法。 因此,您可以测试的另一个选项是将v2 提交为新提交

你可以通过多种方式实现这一目标。这是一种可能的方式(小心谨慎): git checkout -b v2based <v2hash> git checkout master git merge v2based -s theirs //validate here that the HEAD is equal to the origin v2 git push origin master git branch -D v2based