当前位置:   article > 正文

【Git】远程仓库代码覆盖本地仓库代码,解决push上库冲突的问题_git远程仓库覆盖本地仓库

git远程仓库覆盖本地仓库

1. 问题描述

今天在修改了一个代码准备提交到远程仓库的时候发现出现了冲突,但是我很明显的记得我在push的之前有先pull更新了本地的代码。查询的时候发现了如下问题:
git查询当前的分支状态
此处可以发现,我的当前分支为develop分支,并且提示我当前分支已经是最新版本了,但是是基于master分支,而我们的developmaster分支上的代码已经有很大的区别了,这就是问题的点了。

2. 产生原因

我在pull远程仓库的代码的时候,加上了-b master·这个参数,所以我只拉取了远程仓库中的master分支,造成我现在本地的develop链接的远程仓库分支不是我想的develop分支而是master分支,即出现了上图中的问题。

3. 解决措施

根据上面的产生原因,我们来一步步的解决:

Step 1. 将本地的develop分支链接到远程的origin/develop

命令:
	git branch --set-upstream-to=<主机>/<分支名称>

执行如下:	
	git branch --set-upstream-to=origin/develop
  • 1
  • 2
  • 3
  • 4
  • 5

执行结果如下:
第一步执行成功
此时如果去执行git pull --rebase这个指令,那结果会让你酸爽,截图如下:


然后当你按照提示执行指令git am --show-current-patch的时候你就会发现一堆的冲突需要解决。所以这个时候就需要我们的第二步了。

Step 2. 保存修改的本地提交,然后将远程仓库的代码拉取下来强制覆盖本地的代码

为什么需要去保存我们的修改呢,原因是因为我们目前采用的这种覆盖的方法会将所有的没有保存的修改都删除掉,所以需要先保存一下修改的文件。

Ps : 如果你修改的文件是git not tracked的文件,那么可以不用暂存,在进行覆盖的时候不会影响到这些文件。

保存本地的提交有很多种方式,我自己用的有两种:

  1. 构建一个新的本地分支,将修改的部分全部commit到新的分支上去,然后再checkout回来
  2. 利用git stash指令将所有的暂存区的内容缓存记录一下,使用的时候再提取

完成了修改的暂存后,然后再checkout回需要覆盖的分支,我们这里就是develop分支。执行如下指令:

git fetch --all				// 将当前本地分支关联的远程分支最新的代码拉取下来保存,只拉取,不合并
git reset --hard origin/develop		// 将原来本地的develop分支重置为刚获取的远程develop分支
git pull				// 将fetch的代码合并,覆盖本地的代码
  • 1
  • 2
  • 3

至此,本地的develop分支代码已经是最新的了,和远程的origin/develop分支一致。

Step 3. 将本地修改的文件恢复,重新上库

成功截图:

在这里插入图片描述

至此,问题解决!记录一下解决问题的过程,怕年纪大忘了。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/654734
推荐阅读
相关标签
  

闽ICP备14008679号