在开发中,一般会保持两个分支master分支和develop分支,可是若是由于develop上面迭代太多而没有及时维护master,最后想丢弃master而直接将测试确认过的develop强推到master,该怎么操做呢?javascript
网上搜了一下,可是真正本身使用起来却又暴露出各类问题。所以,作以下总结分享,但愿对遇到一样问题的人用帮助。java
网上查找了一个操做步骤,以下:git
git checkout develop
git pull
git push origin develop:master -f
git checkout master
git reset --hard develop
git push origin master --force
或使用下面的命令,将当前分支推送到远程的同名分支。测试
git push origin HEAD
针对上面的步骤,若是你使用的sourcetree管理的GitHub代码,恭喜你,你成功中招了,场景一和场景二在没有修改同一个文件的状况下,上面的五部曲一点问题没有。可是,凡是就怕可是。fetch
若是你对同一个文件进行过维护而致使差别,即使不是同一个代码,都会致使问题产生。分析后发现,问题点主要在步骤4上面,当本地的旧分支master的a.txt文件与最新的远端分支master的a.txt有冲突,须要你手动去判断须要merge操做。spa
这在不多的文件与不多的修改点的状况下,可能你还很好判断,可是若是文件数量庞大,且修改点因时间久远忘记了的状况下,可能我就只能说呵呵了。这也就没有达到标题所说的强制合并的效果。code
在知道了上面问题的症结后,我将上面的步骤作了修正,以下:blog
git checkout develop git pull
git push origin develop:master -f
git checkout master
git fetch --all
git reset --hard origin/master
再执行上面的场景三和场景四,顺利执行完,切换到sourcetree上面,也不会再提示有竞合须要手动merge的操做,也没有须要你push和pull的东西,完美。ip
分析上面的操做,虽然核心操做是步骤2,由于通过步骤2,远端的master已经被你用develop强制替换了,目的是达到了,你彻底能够在本地另起一个路径再clone一份master进行管理。开发
可是,在通过了改良后的操做后,你彻底能够不丢弃已经使用很习惯了的路径,何乐而不为呢。
再说改良后的修正点核心思想:就是获取远端的GitHub文件信息,而不作合并,而后直接丢弃本地旧的代码,直接获取远端分支的代码覆盖到本地,OK,问题解决,但愿对你们有用。