git常见冲突及解决办法
1.内容冲突
产生冲突的原因:两个用户修改了同一个文件的同一块区域,git会报告内容冲突。我们常见的都是这种。
解决冲突的办法:编辑冲突文件,修改冲突。
例如:冲突文件test.c
test.c发生冲突后的内容如下:
#include <stdio.h> #include <wchar.h> ++<<<<<<< HEAD +/* wide character strlen fucntion */ +size_t my_wc_strlen(const wchar_t *s) ++= = = = = = = + wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc) +{ + + while (*ws) { ++ws; + } + return NULL; +} + + size_t my_wstrlen(const wchar_t *s) ++>>>>>>>9d201a9c61bc4713f4095175f8954b642dae8f86 { const wchar_t *p = s;
}
其中:<<<<<<<与=======之间的内容是我修改的,=======与>>>>>>>之间的内容是别人的修改。
解决办法:删除冲突标记,解决冲突。
2.树冲突
产生冲突的原因:文件名修改造成的冲突,称为树冲突。
比如,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”,可以不必理会。