1.把本地的 x分支强制(-f)推送到远端Y分支。
git push origin x:Y -f
2.切换到旧分支master。
git checkout master
将本地的旧分支master重置成最新的develop分支。
git reset --hard develop
再推送到远端仓库。
git push origin master --force<br>
或使用下面的命令,将当前分支推送到远程的同名分支。
git push origin HEAD
针对上面的步骤,如果你使用的sourcetree管理的GitHub代码,恭喜你,你成功中招了,场景一和场景二在没有修改同一个文件的情况下,上面的五部曲一点问题没有。但是,凡是就怕但是。
如果你对同一个文件进行过维护而导致差异,即便不是同一个代码,都会导致问题产生。分析后发现,问题点主要在步骤4上面,当本地的旧分支master的a.txt文件与最新的远端分支master的a.txt有冲突,需要你手动去判断需要merge操作。
这在很少的文件与很少的修改点的情况下,可能你还很好判断,但是如果文件数量庞大,且修改点因时间久远忘记了的情况下,可能我就只能说呵呵了。这也就没有达到标题所说的强制合并的效果。
在知道了上面问题的症结后,我将上面的步骤做了修正,如下:
切换到develop分支下,并保证本地已经同步了远端develop的最新代码。
git checkout develop
git pull
把本地的develop分支强制(-f)推送到远端master。
git push origin develop:master -f
切换到旧分支master。
git checkout master
下载远程仓库最新内容,不做合并。
git fetch --all
把HEAD指向master最新版本。
1git reset --hard origin/master
再执行上面的场景三和场景四,顺利执行完,切换到sourcetree上面,也不会再提示有竞合需要手动merge的操作,也没有需要你push和pull的东西,完美。
分析上面的操作,虽然核心操作是步骤2,因为经过步骤2,远端的master已经被你用develop强制替换了,目的是达到了,你完全可以在本地另起一个路径再clone一份master进行管理。
但是,在经过了改良后的操作后,你完全可以不丢弃已经使用很习惯了的路径,何乐而不为呢。
再说改良后的修正点核心思想:就是获取远端的GitHub文件信息,而不做合并,然后直接丢弃本地旧的代码,直接获取远端分支的代码覆盖到本地,OK,问题解决,希望对大家有用。