关闭

git强制覆盖master分支

时间: 2018-12-10阅读: 4455标签: 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


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1538

git全局忽略设置和.gitignore

在使用git过程中,希望git忽略某些特殊文件或文件夹,避免提交例如.DS_Store等等。先来查看一下git状态:如果只是这一个项目中有部分不需要提交的内容,那么直接在项目最外层创建一个.gitignore

GIT分支管理:创建与合并分支、解决合并冲突

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

git提交代码commit失败的解决方法

不同操作系统下处理行尾结束符的方法是不同的,windows下是CRLF(句尾使用回车和换行),unix下是LF(只换行),mac下是CR(只回车)

多人团队怎么使用 Git,git的使用流程

多人团队合作怎么使用Git来提交我们的代码,总结一下git的使用流程,以下流程都是我们团队正在使用的流程,很好用。给大家分享下,避免你们走弯路。

通过 41 个 问答方式快速了解学习 Git

个人比较喜欢 git add -p. 这增加了“补丁模式”的变化,这是一个内置的命令行程序。它遍历了每个更改,并要求确认是否要执行它们。这个命令迫使咱们放慢速度并检查更改文件。作为开发人员,咱们有时常常急于提交

git合并分支

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

Git忽略文件不起作用的解决方法

开发过程中,我们自己会在gitignore 文件中添加一些忽略项,然而,每次使用git status 的时候都未列在 untracked里面,比如 用IDEA 开发,.idea 文件夹添加到该文件,再提交还是会提示。

当我们git merge的时候到底在merge什么?

用git add、git commit、git branch等命令的时候,Git在背后究竟做了什么,我是答不上来的。好在互联网上有许多这方面的资料可供学习,现在,我试着循序渐进地讲解一遍吧。

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

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

git创建与合并分支

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支

点击更多...

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