zoukankan      html  css  js  c++  java
  • Git 文件冲突合并的几种情况

    假设冲突文件是 index.html

    下面分5种情况讨论。

    1、本地不变。

    然后远程别人有更新。
    git pull
    这种最简单,没有冲突,本地工作区直接更新

    2、我本地修改,但是不add。

    然后远程别人有更新,此时 :
    git pull,
    git会告诉你:

    error: Your local changes to the following files would be overwritten by merge: 
    index.html
    

    此时,我git checkout -- index.html千万注意,上条命令会导致你自己的修改丢失了!!
    然后git pull.成功。
    这种情况下,你自己的修改完全丢失。本地接受了远程的修改。

    3、我本地修改,但是已经add了。

    然后别人远程更新,
    git pull
    这种情况,和上面几乎一样。
    git reset HEAD test/TestCase.php
    上面这条命令可以理解为add命令的逆命令。即,取消add操作。

    然后继续
    git checkout -- index.html
    千万注意,上条命令会导致你自己的修改丢失了!!
    然后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 index.html
      git add index.html
      git commit -m "change test" 
    

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

      git  checkout master
      git pull
    

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

    index.html | 3 ++- 
    

    上面,两个加号表示文件增加了两行,一个减号表示文件减少了一行。

    此时,注意,凡是进入vi界面后, 最好自己再检查一下程序,检查那些被提示修改过的文件,(这是一个好习惯,但我从来不遵守) 如果认为正确,最后, git push,推送到远程。

    push之后,远程得到你和他人的所有更新。push之前,仅本地得到你和他人的所有更新。



    作者:小丶侯
    链接:https://www.jianshu.com/p/daba0bb673a0 
     
     
    假如代码改着改着改乱了,不想要了,如下操作:
    git fetch --all
    git reset --hard origin/master
    git pull //可省略


    git fetch 指令是下载远程仓库最新内容,不做合并
    git reset 指令把HEAD指向master最新版本

    git rest --hard HEAD^:回退到上一版;
    git rest --hard HEAD^^:回退到倒数第二版;
    git rest --hard 123321:回退到commit id为123321的版本;

  • 相关阅读:
    基于XMPP实现的Openfire的配置安装+Android客户端的实现
    Android之基于XMPP协议即时通讯软件
    【Android XMPP】 学习资料收集贴(持续更新)
    R-ArcGIS探秘(1)安装以及Sample执行
    如何打造新媒体微营销平台
    29淘宝论坛推广技巧
    win10 UWP button
    Tomcat 6.x Perm区内存泄露问题
    Android WebView开发常见问题
    创建类模式大PK(总结)
  • 原文地址:https://www.cnblogs.com/Pynix/p/12767018.html
Copyright © 2011-2022 走看看