git 冲突

冲突的产生

?    很多命令都可能出现冲突,但从根本上来讲,都是merge 和 patch(应用补丁)时产生冲突。

?     而rebase就是重新设置基准,然后应用补丁的过程,所以也会冲突。

?    git pull会自动merge,repo sync会自动rebase,所以git pull和repo sync也会产生冲突。当然git rebase就更不用说了

冲突的类型

树冲突

?    方法文件名修改造成的冲突,称为树冲突。

?    比如,a用户把文件改名为a.c,b用户把同一个文件改名为b.c,那么b将这两个commit合并时,会产生冲突。

?    $ git status
    added by us:    b.c
    both deleted:   origin-name.c
    added by them:  a.c

?    如果最终确定用b.c,那么解决办法如下:

?    git rm a.c
git rm origin-name.c
git add b.c
git commit

?    执行前面两个git rm时,会告警“file-name : needs merge”,可以不必理会。

?

?    树冲突也可以用git mergetool来解决,但整个解决过程是在交互式问答中完成的,用d 删除不要的文件,用c保留需要的文件。

?    最后执行git commit提交即可。

逻辑冲突

?    git自动处理(合并/应用补丁)成功,但是逻辑上是有问题的。

?    比如另外一个人修改了文件名,但我还使用老的文件名,这种情况下自动处理是能成功的,但实际上是有问题的。

?    又比如,函数返回值含义变化,但我还使用老的含义,这种情况自动处理成功,但可能隐藏着重大BUG。这种问题,主要通过自动化测试来保障。所以最好是能够写出比较完备的自动化测试用例。

?    这种冲突的解决,就是做一次BUG修正。不是真正解决git报告的冲突。

内容冲突

?    两个用户修改了同一个文件的同一块区域,git会报告内容冲突。我们常见的都是这种。

冲突情况

?    当我们merge还是pull完后如果有冲突的话就会出现下面这个状态

出现CONFLICT 冲突我们就必须去查看对应的文件而不是直接add . 再次commit,这样git会直接把两个冲突的文件合并,然后提交

冲突处理

?    当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(conflict)。解决冲突需要人工处理。

?    比如当前在master分支,想把dev分支merge过来,结果产生了一个冲突,打开文件内容可以看到这么一个冲突:


?    <<<<<<< HEAD

?    test in master

?    =======

?    test in dev

?    >>>>>>> dev

?     <<<<<<<标记冲突开始,后面跟的是当前分支中的内容。

?    HEAD指向当前分支末梢的提交。

?    =======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。

?    >>>>>>>之后的dev是该分支的名字。

?      对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。

git 删除已经 add 文件

使用 git rm 命令即可,有两种选择

?    git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除;

?    git rm --f "文件路径",不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)。

Git工作方法

?   git branch working  #建立一个自己的分支,如取名working

?   git checkout working    #确保使用的是工作分支

?   git add .

?   git commit -m"$1" -a     #提交代码到本地,工作分支增加一个版本,这里的$1是运行脚本的第一个参数

?   git checkout master      git pull origin master   #切换回默认分支,并将默认分支和中央最新版本合并

?   git merge working        #在本地合并你的这次修改到默认分支

?   git push origin master   #提交到中央版本库,接下来还是要切换回工作分支的

?   git checkout working   --force

时间: 2024-11-02 01:21:29

git 冲突的相关文章

git冲突Please move or remove them before you can merge

解决Git冲突造成的Please move or remove them before you can merge git clean -d -fx ""其中x -----删除忽略文件已经对git来说不识别的文件d -----删除未被添加到git的路径中的文件f -----强制运行

Git冲突解决方案

Git冲突解决方案 1.  在代码提交时,先更新,若有冲突.先解决冲突.若提交之后在review时才发现无法合并代码时有冲突,需要abandon此次提交的代码. 2.  解决冲突的基本做法,保存本地代码到本地仓库 ——>  将本地代码还原至服务器上一次合并成功的代码   ——> 将本地仓库的代码加载到本地  ——>  此时,有冲突的代码会加上 ==============>>>>>>>>>>>>>>>

git 冲突解决办法

在项目中使用git管理,冲突是在所难免的,如果没办法解决冲突,可以试试这个办法! 第一步.对工程进行备份,最好是拷贝到其他文件夹中 第二步.在cmd命令栏上,进入到工程目录下,这里的工程只你正在开发的工程 第三步.输入命令 git stash git stash clear git reset --hard  id 注:id指你上传文件的id,在eclipse中右键工程->team->show in history 就可以看到上传的id git pull 第四步.刷新工程 第五步.将备份好的工

git 冲突解决(转载)

gerrit是不会解决冲突的,如果两个人同时改了一个文件的同一行,就会冲突,你将会看到Review in Progress并且最下面会有Your change could not be merged due to a path conflict. 如果在冲突提交者机器上解决远程冲突 cd demo git fetch origin git rebase origin/develop 修改冲突文件 git add . git rebase --continue git push origin 不会

Git冲突:commit your changes or stash them before you can merge. 解决办法(转载)

用git pull来更新代码的时候,遇到了下面的问题: error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes or stash them before you can merge. Aborting 出现这个问题的原因是其他人修改了xxx.php并提交到版本库中去了,而你本地也修改了xxx.php,这时候

解决 Git 冲突的 14 个建议和工具

Git 非常善于合并代码.代码的合并在本地完成,快速而且灵活.正常情况下每次从不同分支合并内容时,冲突有可能会发生.通常解决冲突很简单,就如同知道(如何)选择(保留)重要的更改一样,而有时解决冲突则需要额外的工作. 每个开发者对于解决冲突有不同的偏好.不久前,一位叫丹·史蒂文斯的同事用内部软件 Questions for Confluence 询问了大家是如何做的. 收集到的回答和看法比 Atlassian 之墙有更大的吸引力.下面是我们用多种方式解决 Git 冲突的详尽描述,希望它能提供一些可

Git冲突:commit your changes or stash them before you can merge. 解决办法

用git pull来更新代码的时候,遇到了下面的问题: error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes or stash them before you can merge. Aborting 出现这个问题的原因是其他人修改了xxx.php并提交到版本库中去了,而你本地也修改了xxx.php,这时候

SourceTree + Beynod Compare解决Git冲突的方法

采用可视化SourceTree插件beyondCompare解决冲突 1.构造冲突 (1)修改了server.xml文件的第40行内容并且提交推送到远程库上: (2)另外一个工作目录下也修改了该文件的低40行内容,并且也要推送到远程库上去: 推送的时候出现如下问题: git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags origin master:master Pushing to [email prote

git 冲突是怎么产生的

首先,一个用git 写代码,而且只有一个本地分支的情况下是不会又冲突的. 冲突可以说是两个分支的冲突.具体是两个已经提交的分支的相同文件相同位置的的不同操作进行了合并. 不会冲突的习惯是,修改文件之前先merge 别的分支. 我在master 分支上创建并提交一个文件,切换到新的b分支上是没有这个文件的.这说明分支之间是相互独立的. 通过git merge master 把master上新增的文件给merge 过来.这是不会又冲突的.0+x = x 如果我在新的分支b上把master 对应行的数

Git冲突:commit your changes or stash them before you can merge. 解决办法(转)

用git pull来更新代码的时候,遇到了下面的问题: error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes or stash them before you can merge. Aborting 出现这个问题的原因是其他人修改了xxx.php并提交到版本库中去了,而你本地也修改了xxx.php,这时候