将master分支与development同步

时间:2018-08-11 15:30:40

标签: git github

我是一个开源组织的贡献者,我们的一名开发人员正在与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

1 个答案:

答案 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