Git强制覆盖master分支

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

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

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

你可能感兴趣的:(Git强制覆盖master分支)