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

https://xieye.iteye.com/blog/2433229

本文描述了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的分支功能很强大,应该多使用。
  上面几种情况都没有使用分支。使用分支会更好。
  1)首先,我本地新建并切换分支branch_1,自己起有意义名字,并修改文件。
  git checkout -b branch_1
  vi test/TestCase.php
  git add tests/TestCase.php
  git commit -m "change test"

2)现在,别人已经更新了远程主分支代码(没更新就极其方便了,也不必说了,快速更新)
  我想把分支合并到主分支。
  我应该,先回到主分支,并更新。
  git  checkout master
  git pull

3)然后,在本地,把我的修改分支合并上去。
  git merge branch_1
  自动进入vi界面,让你写注释。
  然后会合并好。

4)类似提示:
  tests/TestCase.php | 3 ++-
  上面,两个加号表示文件增加了两行,一个减号表示文件减少了一行。
  此时,注意,凡是进入vi界面后,
  最好自己再检查一下程序,检查那些被提示修改过的文件,(这是一个好习惯,但我从来不遵守)
  如果认为正确,最后,

5) git push,推送到远程。
  push之后,远程得到你和他人的所有更新。push之前,仅本地得到你和他人的所有更新。
==========
总结,大部分情况下,都推荐使用第5种,使用分支的方法,来管理文件修改冲突。

-----------------------------------------------------------------------------------------------------------------------------------

Git fetch和git pull的区别:

都可以从远程获取最新版本到本地

1.Git fetch:只是从远程获取最新版本到本地,不会merge(合并)

  1. $:git fetch origin master //从远程的origin的master主分支上获取最新版本到origin/master分支上
  2. $:git log -p master..origin/master //比较本地的master分支和origin/master分支的区别
  3. $:git merge origin/master //合并

2.Git fetch:从远程获取最新版本并merge(合并)到本地

  1. $:git pull origin master //相当于进行了 git fetch 和 git merge两部操作

实际工作中,可能git fetch更好一些, 因为在merge前,可以根据实际情况决定是否merge


再说导致报错:error: You have not concluded your merge (MERGE_HEAD exists).的原因可能是在以前pull下来的代码自动合并失败

解决办法一:保留本地的更改,中止合并->重新合并->重新拉取

  1. $:git merge --abort
  2. $:git reset --merge
  3. $:git pull

解决办法二:舍弃本地代码,远端版本覆盖本地版本(慎重)

  1. $:git fetch --all
  2. $:git reset --hard origin/master
  3. $:git fetch

Git应用—05Git文件冲突合并的几种情况(转载)的更多相关文章

  1. CSS外边距合并的几种情况

    CSS外边距合并的几种情况 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. 外边距在CSS1中就有 The width ...

  2. git文件冲突合并的报错:Your local changes to the following files would be overwritten by merge

    记录一下在项目里使用git遇到代码冲突时的解决方法 问题:当我和我同事两个人改了相同的一个文件,他在我提交前提交了,这时候我就提交不了了,并且也pull不下来他的代码 会报错: Your local ...

  3. Eclipse SVN文件冲突及不能直接提交情况

    下图为Eclipse SVN使用过程中存在文件冲突的情形. 以下是三种冲突情形及相应解决办法: 1.简单的文件版本冲突 情形:A改变了文件的头部,B改变了文件的尾部,如果两者改动互不影响,SVN可以智 ...

  4. git 入门教程之冲突合并

    如果足够幸运的话,团队成员互不影响,彼此相安无事,大家各自基于 master 分支的某个 commit 创建自己的分支,平时在分支上独立工作,等到一段时间后再合并 merge 到 master 分支, ...

  5. git恢复误删除文件

    在git仓库管理下误删除文件一般会分为以下3种情况: 1.手动直接删掉,如选择-右击-删除 这种删除未修改本地仓库[版本库],只修改了工作区,直接git checkout -- fileName即可恢 ...

  6. Git文件冲突的常用解决方法

    在提交代码时,偶尔会有文件冲突的情况,当出现: Please, commit your changes or stash them before you can merge. 提示后,可用依次输入下列 ...

  7. git入门五(分支合并冲突和衍合)

    分支合并冲突的处理   合并分支的冲突时在不同的分支中修改了同一个文件的同一部分,程序无法把两份有差异的文件合并,这时候需要人为的干预解决冲突.当前处于master 分支,当dev 分支和master ...

  8. svn 出现冲突时可以使用 meld . 命令合并。 而git的冲突合并详见内容

    1.可以在任意目录使用 git mergetool --tool-help    查看 git 所支持的merge tools. 2.可以使用如下配置去设置merge tool 和 diff tool ...

  9. git命令行解决冲突文件步骤

    原文https://blog.csdn.net/zwl18210851801/article/details/79106448 亲测有用,解决git冲突的好办法 方法一(推荐使用): git pull ...

随机推荐

  1. 利用Burp Suite攻击Web应用

    i春秋作家:Passerby2 web应用测试综述: Web应用漏洞给企业信息系统造成了很大的风险.许多web应用程序漏洞是由于web应用程序缺乏对输入的过滤.简而言之Web应用程序利用来自用户的某种 ...

  2. Android 开发工具方法整理

    1. 获取当前手机系统语言 Locale.getDefault().getLanguage(); 2. 获取当前手机系统版本号 android.os.Build.VERSION.RELEASE; 3. ...

  3. 你不知道的console调试

    概述 浏览器的开发者工具我们经常用,console.log我们也经常用,但是console还有其它一些方便调试的命令,我总结了几个常用的记录在下面,供以后开发时参考,相信对其他人也有用. 获取js执行 ...

  4. Linux下Clamav 杀毒软件安装使用文档

    一.安装Clamav杀毒工具 0.安装Clamav需要的依赖包 yum install libxml* openssl* -y 1.创建clamav组 groupadd clamav 2.创建clam ...

  5. 简介 - RESTful

    RESTful REST(Representational State Transfer,表现层状态转化),可以简单理解为"资源在网络中以某种表现形式进行状态转移" Resourc ...

  6. Angular使用总结 --- 通过指令动态添加组件

    之前自己写的公共组件,都是会先引入,需要调起的时候再通过service控制公共组件状态.值.回调函数什么的.但是有一些场景不适合这种方式,还是动态添加组件更加好.通过写过的一个小组件来总结下. 创建组 ...

  7. iOS开发笔记-一种任意字体、颜色混排UILabel的实现

    最近开发新App,射妓狮给的图上出现一种不同大小字体混排的Label,就像下面这种: 想了想,最简单的方法是使用多个UILabel排列显示,但是这样不仅麻烦而且效果也不好,索性自定义UILabel来尽 ...

  8. js学习笔记----JavaScript中DOM扩展的那些事

    什么都不说,先上总结的图~   Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null ...

  9. Python必会的单元测试框架 —— unittest

    用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库——unittest. unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那 ...

  10. Oracle 基本知识回顾

    1.查找数据库所用的字符集编码:SELECT USERENV('language') FROM DUAL;2.将一个表中的字段,插入到这个表:INSERT INTO TABLE SELECT * FR ...