背景
多人使用同一个远端仓库开发项目,这时候直接推送代码到同一远端仓库,然后就会出现一系列的文件修改冲突情况,接下来我们具体情况具体分析一下。本文的主要围绕着下面两种情况展开的,在阅读之前可以先自己思考一下问题的答案是什么?
- 不同的人修改同一分支相同的文件的相同区域,你会怎么解决冲突?
- 不同的人同时修改同一文件的文件名和文件内容,你会怎么解决冲突?
- 不同的人修改同一分支同一文件的名称,你会怎么解决冲突?
不同的人修改同一分支相同的文件的相同区域
今天小红和小绿都在master分支上做开发,这次他们修改的是同一个文件的同一区域,先提交的小绿还是很吃香的,后提交的小红还是冲突了,这时候该怎么办呢?
首先小红要更新代码(git pull)
,然后发现有冲突的提示,但是 Git 还是做了自动合并,但是它把两次修改的内容都保留在文件中,由用户处理决定如何文件内容。
这时候冲突文件的状态会发生改变,变成未添加的状态,所以改变以后小红需要重新添加提交冲突的文件,但是会多一次处理冲突的提交记录。
那是否有办法减少这次提交记录呢?
首先我们要知道一点,遇到这种冲突情况时,在提交修改的文件前,我们直接拉取远端代码的时候会提示错误。
注意看提示信息,在合并冲突前除了提交代码还有一个stash
操作。
那就是我们先执行git stash
,把本地的修改保存起来,然后执行git pull
更新本地代码,接着执行git stash pop
恢复本地的修改,这时候会发现自动合并冲突的提示,我们只要解决本地冲突的文件,接着添加文件即可,提交记录只有一次。
然后我们可以看一下远端的提交记录,如下所示:
最后总结一下不同的操作流程:
不同的人同时修改同一文件的文件名和文件内容
今天小红和小绿都在master分支上做开发,这次他们修改的还是同一个文件,小绿直接修改了A文件的名称,然后推送到远端仓库。小红修改了A文件的内容,随后推送到远端仓库,发现报错了,这时候小红该怎么办呢?
我们先说第一种解法,推送的时候发现报错,这时候只能补救,更新本地代码(git pull
),然后再推送到远端仓库。git可以帮助我们处理不同的人同时了文件名和文件内容的情况。
那么同样的,我们也可以在推送代码前更新一波本地代码,然后再推送到远端,这样还可以减少推送错误出现的几率。
因为存在合并文件解决冲突的存在,所以这里也会多一条合并文件的记录,如下所示:
如果要减少这种情况,又要使用到我们上面提到的命令(git stash)
,先把本地的修改保存起来,然后再更新代码。
git stash
保存本地修改git pull
更新本地代码git stash pop
还原本地修改,并清楚stash中的记录- 执行
git add xxx
和git commit -m
提交修改文件 git push
推送代码到远端
我们看一下远端的提交记录,发现没有之前那种合并的提交记录了。
总结操作流程:
不同的人修改同一分支同一文件的名称
今天小红和小绿都在master分支上做开发,这次他们修改的还是同一个文件,小绿直接修改了A文件的名称,然后推送到远端仓库。
小红也修改了A文件的名称,随后推送到远端仓库,这时候肯定报错了,此时此刻小红该怎么办呢?
还是使用通用的方法,更新远端的最新代码到本地仓库,然后做冲突处理,不过这次处理的过程会有些不一样了。因为名称被不同的人改了,这下git都被玩懵了,它会把不同名称的文件更新到本地,然后需要我们自己选择保留哪些文件,删除哪些文件。
这里的删除和保留不是在资源管理器中操作!不是在资源管理器中操作!不是在资源管理器中操作!!!重要的事情说三遍,而是使用git的命令:
git add 文件名 #保留需要的文件
git rm 文件名 #删除不需要的文件
然后再执行二连操作(git commit、git push
)即可。
当然我们也可以在commit之前更新远端仓库的代码到本地,一顿操作之后再推送,流程如下所示:
git pull
更新文件到本地- 不同名称的文件更新到本地,开始手动处理文件
git add 文件名
保留需要的文件,git rm 文件名
删除不需要的文件git commit -m
提交修改文件git push
推送代码到远端
最后使用流程图总结一下操作:
但是不管上面哪种操作,在提交记录上,我们可以看到这里本地(test用户)有两次修改记录推送到远端仓库。
当然还有更加优雅的操作,把本地的两次提交记录变成一次,同样的是使用git stash
操作。
操作步骤:
git stash
暂存本地修改git pull
更新远端最新代码到本地git stash pop
还原本地修改git add
和git rm
处理冲突文件git commit
提交本地这次修改git push
推送到远端
我们接着来看一下远端仓库的提交记录,这次发现少了一次提交记录。
操作流程图
绝杀技,通吃一切
同学们,你们有没有发现这里有一个绝杀技通吃一切问题,向小绿学习,先下手为强,修改的代码及时提交。
标签:文件,git,修改,Git,本地,远端,推送 From: https://blog.51cto.com/u_15812995/8872910