我是一个开源组织的贡献者,我们的一名开发人员正在与master分支合作,并希望将master与develop同步。但是由于一些冲突,所有的历史都有些混乱。我想知道如何将master还原到以前的状态,或者最好的方法是与开发同步。
这是供参考的仓库
https://github.com/systers/vms
EDIT1
到目前为止,我已经尝试过
git checkout master
git reset --hard develop
这使我的主人与本地开发同步,但是我不确定这是否是最佳实践。
我打算做
git push --force origin master
EDIT2
上述解决方案无效,因为origin/master
是受保护的分支。所以,我得到了这个错误:
remote: error: Cannot force-push to a protected branch
答案 0 :(得分:1)
那么还有什么可以做的呢?这就是我更感兴趣的。
另一种方法是创建一个新的提交,一个旧的有效提交的镜像副本。
然后,您无需使用--force
就可以推送该新提交。
首先,标记master
的当前HEAD:我们需要移动HEAD ,而无需修改master
,因此我们创建一个名为'{{1} }',tmp
在哪里。
master
然后让我们回到内容正确的旧提交。
git checkout master
git checkout -b tmp
这会将索引(和工作树)重置为正确的内容,但同时还会移动HEAD。幸运的是,它移动了git reset --hard <old_commit>
头,而不是tmp
头。
现在,让我们返回master
HEAD到tmp
所在的位置,但是不修改索引或工作树(它们表示我们需要进行新的提交)
master
让我们在git reset --soft master
/ master
HEAD顶部进行一次新提交,它代表正确的内容(旧提交)。
tmp
最后,我们强制git commit -m "new commit, image of an old one"
在master
所在的位置:稍后再提交一次。
tmp
创建新提交而不是更改当前历史记录的想法是,常规的git branch -M tmp master
git checkout master
就足够了,您的同事可以像往常一样简单地拉,并仍然获得旧的重置内容:
git push