初次接触到git,其他的操作都还好就是在解决冲突的时候,遇到了一些问题,网上找了好多,都感觉不是很明确。经过多次实验,终于搞明白了解决冲突的步骤,特此记录一下。
1.首先我新建了一个空文本文件,然后push到远程仓库。这个时候远程仓库和本地仓库是同步的
2.我分别在本地和浏览器上对这个文本文件进行写操作
3.这个时候,test.txt在本地仓库和远程仓库是不同的,我们先commit本地修改到本地仓库
然后从远处仓库中pull项目
这个时候会发现项目的名字上多了一些向上向下的箭头,向下表示本地与远程仓库有不同,向上表示本地提交的次数
而且如果有的文件发生了冲突,git会自动帮我们合并,但他合并的方式并不是我们想要的
4.现在我们需要打开同步视图去解决我们的冲突
这里显示的是冲突的文件
点击Merge Tool我们就可以分屏看到本地和远程文件的具体修改
5.接下来我们就要参考两个文件来修改test.txt的内容了,以解决冲突,我这里将他们和并在一起,然后保存
6.接下来再提交我们的修改到本地仓库,先add to index,然后commit
这个时候的commit信息会自动为我们填写,就是合并的信息
我们commit后,这时候项目上的箭头也发生了变化
7.这个时候我们就可以将本地项目push到远程仓库了
push后我们项目上的箭头也消失了,这样冲突就解决了
git方法解决冲突:
模似场景:
在本地git里面增加一个文件readme.txt,编辑内容(内容随便写如:中国你好,哈哈),使用命令push到github.
假如你本地 branch 为 master (可以通过 git branch -av查看本地和远程branch名字),远程branch 就是创建repository的名字如:(androidFragment)
1. git add readme.txt(把文件添加到git cache)
2. git commit (提交)
3. git push androidFragment master(这句命令格式为 git push 远程分支名字 本地分支名字)
现在可以看到在github上面看到有一个readme.txt文件。现在开始在本地编辑文件readme.txt(内容随便写如:这是一个readme.txt文件,用于描述项目内容);
同时,在github网站上面也编辑readme.txt,内容改下就好(如:中国你好,哈哈,hello).
到此,场景已经模似出来了。
现在在执行上面的1,2,3 步骤,就会push不上去了。如图:
说的意思是,push到github的远程访问被拒了,push失败,因为远程包含了你所做的工作(就是远程也做过更新)。
按照SVN,CVS的用法就从远程更新本地的文件,操作:git pull 远程 branch 本地branch ,查看本地文件没远程的内容,没有成功;使用了git merge 远程branch好像也没成功(这步应该是不用试的,肯定不行)。
就在 git pull 远程branch名字 本地branch名字 时,提示有一个什么rebase命令,git pull --rebase 远程branch名字 本地branch名字。如图:
远程更新文件内容到本地成功。
但是,有几个问题又出现了
1.执行成上步后,文件内容出现<<<============
========>>>这样的内容,那就只能手动修改文件了,在git bash 中使用vi readme.txt编辑。改好后,wq.此问比较小,修改内容等待git push。
2. 使用了git pull --rebase 远程branch名字 本地branch名字后,master 名字改了。如图:
看到这个不一样,也没太注意。可是当我git push androidFragment master 时,还是执行完1,2,3步后,那个还是拒绝。
于是看一下,如图:
也就释然了(红框包容内容)。执行了一下git rebase --continue提示如图:
还是搞不定。于是我就执行了,git rebase --skip ,执行后,没有提示内容,但是(master|rebase1/1)没有了。
如图:
说明可以git push了,然后我就执行1,2,3步骤,提示成功。
再去github网页上面刷新,看到文件已经提交,内容是本地的内容,问题解决