0
点赞
收藏
分享

微信扫一扫

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)

背景

多人使用同一个远端仓库开发项目,这时候直接推送代码到同一远端仓库,然后就会出现一系列的文件修改冲突情况,接下来我们具体情况具体分析一下。本文的主要围绕着下面两种情况展开的,在阅读之前可以先自己思考一下问题的答案是什么?

  • 不同的人修改同一分支相同的文件的相同区域,你会怎么解决冲突?
  • 不同的人同时修改同一文件的文件名和文件内容,你会怎么解决冲突?
  • 不同的人修改同一分支同一文件的名称,你会怎么解决冲突?

不同的人修改同一分支相同的文件的相同区域

今天小红和小绿都在master分支上做开发,这次他们修改的是同一个文件的同一区域,先提交的小绿还是很吃香的,后提交的小红还是冲突了,这时候该怎么办呢?

首先小红要更新代码(git pull),然后发现有冲突的提示,但是 Git 还是做了自动合并,但是它把两次修改的内容都保留在文件中,由用户处理决定如何文件内容。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_GitHub

这时候冲突文件的状态会发生改变,变成未添加的状态,所以改变以后小红需要重新添加提交冲突的文件,但是会多一次处理冲突的提交记录。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_推送_02

那是否有办法减少这次提交记录呢?

首先我们要知道一点,遇到这种冲突情况时,在提交修改的文件前,我们直接拉取远端代码的时候会提示错误。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_GitHub_03

注意看提示信息,在合并冲突前除了提交代码还有一个stash操作。

那就是我们先执行git stash,把本地的修改保存起来,然后执行git pull更新本地代码,接着执行git stash pop恢复本地的修改,这时候会发现自动合并冲突的提示,我们只要解决本地冲突的文件,接着添加文件即可,提交记录只有一次。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_文件名_04

然后我们可以看一下远端的提交记录,如下所示:

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_后端_05

最后总结一下不同的操作流程:

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_git_06

不同的人同时修改同一文件的文件名和文件内容

今天小红和小绿都在master分支上做开发,这次他们修改的还是同一个文件,小绿直接修改了A文件的名称,然后推送到远端仓库。小红修改了A文件的内容,随后推送到远端仓库,发现报错了,这时候小红该怎么办呢?

我们先说第一种解法,推送的时候发现报错,这时候只能补救,更新本地代码(git pull),然后再推送到远端仓库。git可以帮助我们处理不同的人同时了文件名和文件内容的情况。

那么同样的,我们也可以在推送代码前更新一波本地代码,然后再推送到远端,这样还可以减少推送错误出现的几率。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_后端_07

因为存在合并文件解决冲突的存在,所以这里也会多一条合并文件的记录,如下所示:

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_文件名_08

如果要减少这种情况,又要使用到我们上面提到的命令(git stash),先把本地的修改保存起来,然后再更新代码。

  1. git stash保存本地修改
  2. git pull更新本地代码
  3. git stash pop还原本地修改,并清楚stash中的记录
  4. 执行git add xxxgit commit -m提交修改文件
  5. git push推送代码到远端

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_文件名_09

我们看一下远端的提交记录,发现没有之前那种合并的提交记录了。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_git_10

总结操作流程:

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_GitHub_11

不同的人修改同一分支同一文件的名称

今天小红和小绿都在master分支上做开发,这次他们修改的还是同一个文件,小绿直接修改了A文件的名称,然后推送到远端仓库。

小红也修改了A文件的名称,随后推送到远端仓库,这时候肯定报错了,此时此刻小红该怎么办呢?

还是使用通用的方法,更新远端的最新代码到本地仓库,然后做冲突处理,不过这次处理的过程会有些不一样了。因为名称被不同的人改了,这下git都被玩懵了,它会把不同名称的文件更新到本地,然后需要我们自己选择保留哪些文件,删除哪些文件。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_git_12

这里的删除和保留不是在资源管理器中操作!不是在资源管理器中操作!不是在资源管理器中操作!!!重要的事情说三遍,而是使用git的命令:

git add 文件名 #保留需要的文件
git rm 文件名 #删除不需要的文件

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_文件名_13

然后再执行二连操作(git commit、git push)即可。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_GitHub_14

当然我们也可以在commit之前更新远端仓库的代码到本地,一顿操作之后再推送,流程如下所示:

  1. git pull更新文件到本地
  2. 不同名称的文件更新到本地,开始手动处理文件
  3. git add 文件名保留需要的文件,git rm 文件名删除不需要的文件
  4. git commit -m提交修改文件
  5. git push推送代码到远端

最后使用流程图总结一下操作:

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_后端_15

但是不管上面哪种操作,在提交记录上,我们可以看到这里本地(test用户)有两次修改记录推送到远端仓库。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_推送_16

当然还有更加优雅的操作,把本地的两次提交记录变成一次,同样的是使用git stash操作。

操作步骤:

  1. git stash暂存本地修改
  2. git pull更新远端最新代码到本地
  3. git stash pop还原本地修改
  4. git addgit rm处理冲突文件
  5. git commit提交本地这次修改
  6. git push推送到远端

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_文件名_17

我们接着来看一下远端仓库的提交记录,这次发现少了一次提交记录。

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_GitHub_18

操作流程图

Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)_git_19

绝杀技,通吃一切

同学们,你们有没有发现这里有一个绝杀技通吃一切问题,向小绿学习,先下手为强,修改的代码及时提交。

举报

相关推荐

0 条评论