在开发中,通常会保持两个分支master分支和develop分支,但是如果因为develop上面迭代太多而没有及时维护master,最后想丢弃master而直接将测试确认过的develop强推到master,该怎么操作呢?

网上搜了一下,但是真正自己使用起来却又暴露出各种问题。因此,做如下总结分享,希望对遇到同样问题的人用帮助。

  • 场景一:master下有a.txt文件,develop下有a.txt(和master保持一致),b.txt文件(追加文件),c/c.txt文件(追加文件夹和文件)。
  • 场景二:master下有a.txt文件,develop下有a.txt(追加自己内容),b.txt文件(追加文件),c/c.txt文件(追加文件夹和文件)。
  • 场景三:master下有a.txt文件(追加自己内容),develop下有a.txt(追加自己内容),b.txt文件(追加文件),c/c.txt文件(追加文件夹和文件)。其中master的a.txt和develop的a.txt不存在竞合。
  • 场景四:master下有a.txt文件(追加自己内容),develop下有a.txt(追加自己内容),b.txt文件(追加文件),c/c.txt文件(追加文件夹和文件)。其中master的a.txt和develop的a.txt存在竞合。

网上查找了一个操作步骤,如下:

  1. 切换到develop分支下,并保证本地已经同步了远端develop的最新代码

    git checkout develop
    git pull
  2. 把本地的develop分支强制(-f)推送到远端master。
    git push origin develop:master -f
  3. 切换到旧分支master。
    git checkout master
  4. 将本地的旧分支master重置成最新的develop分支。
    git reset --hard develop
  5. 再推送到远端仓库。
    git push origin master --force
    

    或使用下面的命令,将当前分支推送到远程的同名分支。

    git push origin HEAD
    

      

针对上面的步骤,如果你使用的sourcetree管理的GitHub代码,恭喜你,你成功中招了,场景一和场景二在没有修改同一个文件的情况下,上面的五部曲一点问题没有。但是,凡是就怕但是。

如果你对同一个文件进行过维护而导致差异,即便不是同一个代码,都会导致问题产生。分析后发现,问题点主要在步骤4上面,当本地的旧分支master的a.txt文件与最新的远端分支master的a.txt有冲突,需要你手动去判断需要merge操作。

这在很少的文件与很少的修改点的情况下,可能你还很好判断,但是如果文件数量庞大,且修改点因时间久远忘记了的情况下,可能我就只能说呵呵了。这也就没有达到标题所说的强制合并的效果。

在知道了上面问题的症结后,我将上面的步骤做了修正,如下:

  1. 切换到develop分支下,并保证本地已经同步了远端develop的最新代码。

    git checkout develop
    git pull
  2. 把本地的develop分支强制(-f)推送到远端master。
    git push origin develop:master -f
  3. 切换到旧分支master。
    git checkout master
  4. 下载远程仓库最新内容,不做合并。
    git fetch --all
  5. 把HEAD指向master最新版本。
    git reset --hard origin/master
    

      

再执行上面的场景三和场景四,顺利执行完,切换到sourcetree上面,也不会再提示有竞合需要手动merge的操作,也没有需要你push和pull的东西,完美。

分析上面的操作,虽然核心操作是步骤2,因为经过步骤2,远端的master已经被你用develop强制替换了,目的是达到了,你完全可以在本地另起一个路径再clone一份master进行管理。

但是,在经过了改良后的操作后,你完全可以不丢弃已经使用很习惯了的路径,何乐而不为呢。

再说改良后的修正点核心思想:就是获取远端的GitHub文件信息,而不做合并,然后直接丢弃本地旧的代码,直接获取远端分支的代码覆盖到本地,OK,问题解决,希望对大家有用。

Git强制覆盖master分支的更多相关文章

  1. git强行覆盖master分支

    目录 我遇到的场景 需要注意的预备操作 操作步骤 我遇到的场景 1.master分支只为护较早的版本 2.由于业务不稳定,新业务和功能都在dev 分支上,dev的开发周期很长,一直变更迭代 3.从de ...

  2. git 强制覆盖分支

    假设要用develop覆盖master分支,如下操作 git checkout master git reset --hard develop //先将本地的master分支重置成develop gi ...

  3. dev分支代码覆盖master分支代码

    将develop分支上的代码完全覆盖master分支, 1. 切换到master分支 git checkout master 2. 执行以下命令 git reset --hard origin/dev ...

  4. VS2013中使用git发布解决方案master分支的时候出现错误

    VS2013GIT基础用法请自行参考:不会Git命令,照样玩转Git 环境:VS2013+ 码云错误描述:在VS2013中使用git发布解决方案master分支的时候出现“无法将本地分支 master ...

  5. git 如何把master分支代码合并到自己的分支

    master分支的代码领先自己的分支,git 如何把master分支代码合并到自己的分支 1.首先切换到主分支 git checkout master 2.使用git pull 把领先的主分支代码pu ...

  6. git 强制覆盖,分支合并

    强制合并 git fetch --all && git reset --hard origin/master && git pull 合并代码 git commit - ...

  7. GIT回滚master分支到指定tag版本

    master版本上线以后一般要打一个tag备份,以防事态有变,这是一个好习惯,如果以后有问题也可以放心的回滚版本,那么怎么用tag版本覆盖mastaer呢,其实只有几个命令 1.查看分支 git br ...

  8. 如何删掉git版本库master分支的第一个commit

    这个操作会将库清空,一般来说在建库开始的时候操作. 适用场景: git init初始化版本库之后,提交第一个点之后发现这个点出问题了,但是此时内心如果有洁癖的话, 你会觉得不完美,很想把这个点干掉重来 ...

  9. test 分支强制替换master 分支的办法

    test分支改动太多,并且master 分支好久没有改动.直接合并到master 分支的话,会产生很多冲突,几十个文件,修复冲突会花很多时间,并且是没有意义的.因此只能使用test 分支强制替换. 代 ...

随机推荐

  1. angular4(2-1)angular脚手架引入第三方类库(jquery)

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 如何在angular4脚手架中引入第三方类库呢比如jquery.swiper.bootstrap...... 例如引入j ...

  2. xBIM 基础08 WeXplorer 简介

    系列目录    [已更新最新开发文章,点击查看详细]  一.WeXplorer 简介 WeXplorer 是 XBIM 工具包的可视化部分,它使用预处理的 WexBIM 文件在 Web 上处理 IFC ...

  3. SPOJ 694/705 后缀数组

    思路: 论文题*n Σn-i-ht[i]+1 就是结果 O(n)搞定~ //By SiriusRen #include <cstdio> #include <cstring> ...

  4. Kettle学习系列之kettle的下载、安装和初步使用(windows平台下)(图文详解)

    不多说,直接上干货! kettle的下载 žKettle可以在http://kettle.pentaho.org/网站下载                   http://sourceforge.n ...

  5. Java 以空格分割字符串

    Java中使用类似于 str.split("/"); 的方法可以很方便的实现将一个字符串分割为数组, 但是如果分隔符是一个(或几个)空格呢?? 我们的本能反应或许应该是 str.s ...

  6. 关于 jsp java servlet 中文汉字乱码的解决方法

    在servlet类中的get,post最前面加上 req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding(&quo ...

  7. CSS3———linear-gradient() 线性渐变

    线性渐变linear-gradient() 遇到了这样的css样式 body { height: 100%; background-color: #ffffff; background-image: ...

  8. 优动漫PAINT个人版绘制树叶教程

    超详细树叶绘制法,更有配套绘树小TIPE!让你画树So Easy~一秒变身,画树达人! 优动漫PAINT个人版软件下载:http://www.dongmansoft.com/chanpin.html ...

  9. 贰、js的基础(二)类型转换

    JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...

  10. [zjoi2016]小星星 (容斥+DP)

    我们先用树形DP,求出选取集合S中的点,满足连通性的但是标号可重的方案数,贡献给F(i)(1\(\leq\)i\(\leq\)\(\mid S\mid\)),也就是我们要处理出F(i)代表取至多i个点 ...