当前位置:首页 » PHP技术

git文件冲突合并的几种情况

2018-11-06 06:01 本站整理 浏览(80)

本文描述了git冲突的几种常见情况和解决方案,老鸟请直接忽略本文。
假设冲突文件是 test/TestCase.php
  下面分5种情况讨论。
1、本地不变。
  然后远程别人有更新。
  git pull
  这种最简单,没有冲突,本地工作区直接更新
 
2、我本地修改,但是不add。
然后远程别人有更新,此时 :    
git pull,
git会告诉你:
error: Your local changes to the following files would be overwritten by merge:
        tests/TestCase.php
  此时,我 
   git checkout -- tests/TestCase.php
  千万注意,上条命令会导致你自己的修改丢失了!!
  然后git pull.成功。
  这种情况下,你自己的修改完全丢失。本地接受了远程的修改。
 
3、我本地修改,但是已经add了。
  然后别人远程更新,
  git pull
  这种情况,和上面几乎一样。
  git reset HEAD test/TestCase.php 
  上面这条命令可以理解为add命令的逆命令。即,取消add操作。
 
  然后继续
  git checkout -- tests/TestCase.php
  千万注意,上条命令会导致你自己的修改丢失了!!
  然后git pull.成功。
  这种情况下,你自己的修改完全丢失。 本地接受了远程的修改。
   
4、我本地修改,add 且 commit了
  然后别人远程更新,
  git pull
  注意:这种情况和第2,第3种情况不同。git会认为你的commit也很重要。同等重要。
突然发现,自动进入vi界面。
Merge branch 'master' of https://github.com/xxxx
这什么意思呢?就是git会主动再帮你添加一个commit。
先让你写点注释,并且它已经帮你写了几句话
那自己写点东西,然后保存退出vi
请注意,这个commit是在本地的,还没有发到远程。
这个commit会自动合并 你添加到代码,和 别人远程更新的代码,
所以,之后请自己检查一下这个代码有无问题。
  如果都没有问题,则你现在
  git push
  这个命令可以把你的本地改动推送到远程。
  push之后,远程得到你和他人的所有更新。push之前,仅本地得到你和他人的所有更新。
 
5、使用分支功能。
  git的分支功能很强大,应该多使用。
  上面几种情况都没有使用分支。使用分支会更好。
  首先,我本地新建并切换分支branch_1,自己起有意义名字,并修改文件。
  git checkout -b branch_1
   
  vi test/TestCase.php
  git add tests/TestCase.php
  git commit -m "change test"
 
  现在,别人已经更新了远程主分支代码(没更新就极其方便了,也不必说了,快速更新)
  我想把分支合并到主分支。
  我应该,先回到主分支,并更新。
  git  checkout master
  git pull
 
  然后,在本地,把我的修改分支合并上去。
  git merge branch_1
  自动进入vi界面,让你写注释。
 
  然后会合并好。
  类似提示:
  tests/TestCase.php | 3 ++-
  上面,两个加号表示文件增加了两行,一个减号表示文件减少了一行。
 
  此时,注意,凡是进入vi界面后,
  最好自己再检查一下程序,检查那些被提示修改过的文件,(这是一个好习惯,但我从来不遵守)
  如果认为正确,最后,
  git push,推送到远程。
 
  push之后,远程得到你和他人的所有更新。push之前,仅本地得到你和他人的所有更新。
==========
总结,大部分情况下,都推荐使用第5种,使用分支的方法,来管理文件修改冲突。