git比较本地仓库和远程仓库的差异并更新本地仓库(实践版)
当我们在多台电脑上进行同一个项目时,经常需要修改提交内容然后在另外一台电脑上进行更新。今天看了一下如何从远程代码仓库获取更新到本地。
1、查看本地仓库对应的远程分支
先查看远程仓库分支
git remote -v
fetch:代表用于拉取的远程仓库地址
push:代表用于提交的远程仓库地址
2、从远程获取远程仓库最新版本到本地
在本地新建一个temp分支,并将远程仓库的master分支的代码下载到本地分支上面,这样的好处是可以通过IDEA等IDE进行可视化对比两个分支,查看差异
git fetch origin master:temp
3-1、通过IDEA比对本地代码与下载的temp分支差异
3-2、比较temp分支与本地仓库
git diff temp
使用 git diff temp 可以比较当前本地仓库和temp仓库之间的差异
4、更新当前的本地仓库
使用git merge temp就可以更新当前的仓库了,更新之后我们把创建的temp文件夹删除就可以了
git merge temp
上面命令是将分支temp上的修改,合并到当前分支
合并结果如遇到【快进-fastforward】
如果遇到【快进-fastforward】情况,则会发生git直接修改当前分支指针指向分支temp所指向的“提交”,比如上图就是fastforward了。
合并结果如遇到【冲突-conflict】
- 执行git merge dev时遇到冲突
如果遇到冲突(当前分支与分支123都修改了相同的代码行),会发生automatic merge failed(自动合并失败),git会让你解决冲突,下面例子中是test2.txt:
git会在发生冲突时,在当前分支的test2.txt文件中标记冲突:
其中========分割两个版本代码
其中<<<<<<<< HEAD 下面 到 =========上面:为当前分支内容
其中>>>>>>>> dev 上面 到 =========下面:为分支123(这里是dev)分支内容
中间用======分割
接下来通过直接手工编辑这个文件,保留合并之后的内容,之后执行:git add test2.txt命令告诉git,冲突以及已经解决了(这里的git add命令与将工作区修改提交到暂存区是不同的涵义)
示例:
执行git commit后会提示如下界面,然后直接执行 :wq 即可
至此,冲突已经解决掉了:
2、执行git pull时遇到冲突
说明:执行git pull从远程仓库更新代码到本地时,可能产生冲突,图中提示出哪个文件存在冲突:hello.txt
然后直接编辑这个文件,即手工解决冲突(vi工具或者其他工具):
其中展示形式跟冲突提示格式相同。
编辑时使用vi命令 删除当前一行:dd 删除多行:命令模式下::起始行号,结束行号d |
然后执行git add hello.txt告诉git冲突已经被解决掉了
然后执行git commit将修改提交到版本库
上图的本地分支比本地远程分支origin/master领先2个提交:
①对文件本身的修改
②冲突解决后产生了一次提交
然后执行git push进行发布远程
删除之前创建的temp临时分支
命令1:git branch -d 分支名
前提是当前分支的修改已经被合并到master分支
说明1:执行删除操作时,当前所在分支不能是被删除的分支:
说明2:执行删除操作时,git会检测如果被删除的分支没有将其修改合并到master分支时,会进行如下提示:
命令2:git branch -D 分支名
不管当前分支的修改是否合并到master分支,都进行删除
上一篇: git操作本地仓库和远程仓库
下一篇: Linux — 管道