当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?的副本,因为我
如上所述,我只想让旧版本/ commit成为新的主人
答案 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