andrew_matt

V1

2022/08/20阅读:23主题:默认主题

git解决冲突

git解决冲突:

本节关于解决冲突的参考资料(在P18部分): git视频教程

1. 本地分支解决冲突。

发生原因:本地仓库的不同分支,对同一文件做了不同修改。

本地不同分支间 在想要merge时,如果发生冲突(即不同分支对同一个文件做了不同修改)
git会提示这样的错误信息:

Auto-merging [发生冲突的文件名]
CONFLICT (content): Merge conflict in test.md
Automatic merge failed; fix conflicts and then commit the result.

在提示这样的信息的时候,git的分支提示也会产生变化
当前所在的分支名字后面会加上“ |MERGING ”的信息,
在有这个“|merging”的这种情况下,就可以通过“** vim [发生冲突的文件名] ”** 来查看文件中冲突的内容,并 在vim中手动选择要怎么保留这个文件的内容
修改完毕后,再进行git add 、git commit , 然后”|MERGING“的标识就会不见了,代表merge完成了。

2. 远程仓库解决冲突。

发生原因:本地仓库和远程仓库对同一文件做了不同修改。

这时候,push、pull、fetch 都会报错。

这种情况下,需要:

  1. 先把远程仓库pull或者fetch到本地一个新的分支;
    (直接拉取到一个不存在的本地分支名称,这样就是新建了。是为了成功pull/fetch到本地);
    (第一步完成后,剩余的步骤就和上面处理本地分支冲突是一样的了。)
  2. 然后再merge进需要的分支;
  3. 最后在push到远程仓库(如果需要同步的话)。

总结:

这里再重复一下远程仓库的冲突的解决步骤:
1. 先fetch或者pull到本地一个新的分支;
2. 然后就和解决本地分支merge的冲突的步骤一致了。
***
本地分支merge的冲突的解决办法:
1. 先git merge [被merge的分支名]
2. 第一步会报错,在出现”|MERGING“的信息后,vim [冲突文件名],
3. 进入vim后,手动编辑选择要怎么保留文件,然后保存 :wq
4. 最后git add 、git commit,"|MERGING"的标识就会消失了。表示merge完成。

关于第一次push

新建远程仓库后,第一次push或者pull,提示本地和远程有不同的历史( 两个分支是两个不同的版本,具有不同的提交历史).
(其实是因为在github新建仓库时,勾选了”新建readme.md文件“。 这个新建步骤应该是相当于自动进行了一次commit)

解决方法:

git pull [shortname] [远程分支名]:[本地分支名] --allow-unrelated-histories

意思是:可以允许不相关历史提交,强制合并 。

注意: 应该先pull (先把远程仓库的readme.md文件pull下来,再push。 这样以后远程仓库和本地仓库就有一致的历史了。)


分类:

后端

标签:

Git

作者介绍

andrew_matt
V1

not yet