git强制覆盖master分支

更新日期: 2018-12-10 阅读: 9.9k 标签: git

在开发中,通常会保持两个分支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<br>

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

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,问题解决,希望对大家有用。


原文:https://www.cnblogs.com/king-le0/archive/2018/12/10/10097583.html


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/1538

相关推荐

git从远程仓库克隆dev分支到本地的实现

这篇文章主要介绍git从远程仓库拉取dev分支到本地的实现【gitLab】:初始化一个本地仓库、与远程仓库建立连接 、查看本地是否具有dev分支、在本地创建分支dev并切换到该分支 、dev分支上的内容都拉取到本地

解决git/github下载速度缓慢的问题总汇

官网下载Git时,速度几乎是超不过20KB,解决方法有很多,这里介绍几个简单粗暴的方法。这里使用windows系统作为演示,其他系统对号入座即可。

Git报错:remote: HTTP Basic: Access denied的解决方法

账号密码验证不通过,密码或者权限不对,导致 Git 操作失败。输入:git config --system --unset credential.helper,再次进行 Git 操作,输入正确的用户名,密码即可。

通过git命令,上传本地文件到git服务器

把本地代码上传到git的方法:步骤一:首先进入需要上传的项目文件夹,通过命令git init初始化,步骤二:将本地文件添加到版本库中,使用命令 git add . 将文件提交到本地的暂存区,步骤三:使用命令git commit将文件提交到本地仓库...

vscode git 全局忽略文件和文件夹

windows 中先在当前用户根目录下创建一个全局要忽略的文件列表.gitignore_global,window下 只有扩展名的文件不让保存,可以在 git bash中创建文件;二、 然后在命令行下执行下面git 命令

git合并分支

假如我们现在在dev分支上,刚开发完项目,执行了下列命令:想将dev分支合并到master分支,操作如下:首先切换到master分支上,如果是多人开发的话 需要把远程master上的代码pull下来

Git忽略规则文件.gitignore_关于.gitignore配置

.gitignore 文件的作用就是告诉git, push的时候忽略指定的文件夹或者文件,例如:vue-cli脚手架创建的项目,push到github上时,不会上传node依赖文件夹,这是因为vue-cli脚手架创建的时候,自动为我们创建了 .gitignroe文件,并且为我们写好了规则。

Git 如何撤回某一次提交?

在 master 分支做了一次 commit.之前没有出过这样的错误。就算出现也是直接push了然后再 reset 回滚然后再次 push -f。重置位置的同时,只保留Working Tree工作目录的內容

.gitignore的使用手册

避免将不必要的文件添加到版本管理系统中,比如前端的node_modules目录,该目录包含大量文件,如果将其添加到版本管理系统中,会使仓库变的庞大,不利于仓库的管理。

git pull/push时总需要输入用户名密码的解决方案

在提交项目代码或者拉代码的时候,git会让你输入用户名密码,解决方案:执行命令git config --global credential.helper store

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!