Git分支中冲突的处理
2605
假设要在wchar_support分支中执行更改,修改wchar_support分支中的代码。添加一个计算长度的函数:count_len(obj),代码变化如下:
$ git branch master * wchar_support Administrator@MY-PC /D/worksp/sample/src (wchar_support) $ git diff diff --git a/src/string.py b/src/string.py index ba6d584..4307fe2 100644 --- a/src/string.py +++ b/src/string.py @@ -13,4 +13,7 @@ a = '我' # b = 'ab' ab = '我ab' -print(len(a), len(b), len(ab), len('=')) \ No newline at end of file +print(len(a), len(b), len(ab), len('=')) + +def count_len(obj): + return len(obj) \ No newline at end of file
假设验证代码后,没有问题就提交这些更改。
$ git status On branch wchar_support Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: string.py no changes added to commit (use "git add" and/or "git commit -a") Administrator@MY-PC /D/worksp/sample/src (wchar_support) $ git add string.py Administrator@MY-PC /D/worksp/sample/src (wchar_support) $ git commit -m "add new function: count_len(obj)" [wchar_support 1cc9ddb] add new function: count_len(obj) 1 file changed, 4 insertions(+), 1 deletion(-)
执行 master 分支变更
同时在master分支中,另外一个开发人员(minsu)还会更改了内容,并将其更改推送到master分支。
bjpowernode@ubuntu:~/git/sample/src$ git diff diff --git a/src/string.py b/src/string.py index ba6d584..5eb2a5d 100644 --- a/src/string.py +++ b/src/string.py @@ -13,4 +13,6 @@ a = '我' # b = 'ab' ab = '我ab' -print(len(a), len(b), len(ab), len('=')) \ No newline at end of file +print(len(a), len(b), len(ab), len('=')) +def obj_len(obj): + return len(obj) bjpowernode@ubuntu:~/git/sample/src$
验证差异后,现在就提交更新内容。
bjpowernode@ubuntu:~/git/sample/src$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: string.py no changes added to commit (use "git add" and/or "git commit -a") bjpowernode@ubuntu:~/git/sample/src$ git add string.py bjpowernode@ubuntu:~/git/sample/src$ git commit -m 'Changed function name from w_strlen to my_wc_strlen' [master 07cd5af] Changed function name from w_strlen to my_wc_strlen 1 file changed, 3 insertions(+), 1 deletion(-) bjpowernode@ubuntu:~/git/sample/src$ git push origin master Username for 'http://git.oschina.net': 769728683@qq.com Password for 'http://769728683@qq.com@git.oschina.net': Counting objects: 4, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 398 bytes | 0 bytes/s, done. Total 4 (delta 1), reused 0 (delta 0) To http://git.oschina.net/bjpowernode/sample.git e7d1734..07cd5af master -> master
在wchar_support分支上,我们已经实现了一个count_len(obj)函数。假设经过测试后,提交并将其更改推送到wchar_support分支。
出现冲突
假设另外一个开发人员(minsu)想看看我们在wchar_branch分支上做了什么,他试图从wchar_support分支中拉出最新的变化,但是Git会中断这个操作,并显示以下错误消息。
bjpowernode@ubuntu:~/git/sample/src$ git pull origin wchar_support remote: Counting objects: 4, done. remote: Compressing objects: 100% (3/3), done. remote: Total 4 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (4/4), done. From http://git.oschina.net/bjpowernode/sample * branch wchar_support -> FETCH_HEAD e7d1734..1cc9ddb wchar_support -> origin/wchar_support Auto-merging src/string.py CONFLICT (content): Merge conflict in src/string.py Automatic merge failed; fix conflicts and then commit the result. bjpowernode@ubuntu:~/git/sample/src$
解决冲突
从错误消息中,很明显文件:src/string.py 中存在冲突。运行git diff命令查看更多细节。
bjpowernode@ubuntu:~/git/sample/src$ git diff diff --cc src/string.py index 5eb2a5d,4307fe2..0000000 --- a/src/string.py +++ b/src/string.py @@@ -14,5 -14,6 +14,11 @@@ b = 'ab ab = '我ab' print(len(a), len(b), len(ab), len('=')) ++<<<<<<< HEAD +def obj_len(obj): + return len(obj) ++======= + + def count_len(obj): - return len(obj) ++ return len(obj) ++>>>>>>> 1cc9ddb410561976b006106590481cc01b79080e bjpowernode@ubuntu:~/git/sample/src$
由于两个人同进修改了string.py中的代码,所以Git处于混乱状态,并且要求用户手动解决冲突。
假设maxsu决定保留修改的代码,并删除了自己定义的函数:obj_len(obj)。删除冲突标记后(<<<<<<<<<<<<<<<< 和 >>>>>>>>>>>>>>>>>>>>的行),现在冲突的代码如下所示:
解决冲突需要修改代码后,如下所示:
git diff将如下所示:
bjpowernode@ubuntu:~/git/sample/src$ git diff diff --cc src/string.py index 5eb2a5d,4307fe2..0000000 --- a/src/string.py +++ b/src/string.py @@@ -14,5 -14,6 +14,7 @@@ b = 'ab ab = '我ab' print(len(a), len(b), len(ab), len('=')) + -def count_len(obj): - return len(obj) +def obj_len(obj): + return len(obj) ++ bjpowernode@ubuntu:~/git/sample/src$
由于minsu已经修改了这些文件,所以必须首先提交这些修改,然后就可以提出这些修改。如下所示:
bjpowernode@ubuntu:~/git/sample/src$ git add . bjpowernode@ubuntu:~/git/sample/src$ git commit -a -m 'Resolved conflict' [master 33f0406] Resolved conflict bjpowernode@ubuntu:~/git/sample/src$ git pull origin wchar_support
已经解决了冲突,现在执行git pull应该没有问题了。
原文链接: https://www.yukx.com/github/article/details/1988.html 优科学习网Git分支中冲突的处理
推荐文章
-
git的版本管理,及HEAD的理解使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而mas
-
在IntelliJIDEA中,要根据数据库表直接生成对应的DataObject(DO)类,可以利用其内置的 DatabaseTools 功能,特别是其中的 JPABuddy插件 或者 ReverseEngineering(逆向工程) 功能。这里提供两种方法供您参考:方法一:使用JPABuddy插件J
-
说到分支管理模型,令人最为熟悉的莫过于TrunkBased和GitFlow。TrunkBased模型是持续集成思想所崇尚的工作方式,它由单个master分支和许多release分支组成,每个release分支在特定版本的提交点上从master分支创建出来,用来进行上线部署和Hotfix。在Trunk
-
在IntelliJIDEA(简称IDEA)中,如果你想避免导入星号(*)的方式引入包中的所有类,可以在设置中调整IDE的行为,使其遵循更严格的代码风格规范。虽然Java允许使用import*形式的静态导入(例如importstaticjava.util.Arrays.*;),但通常建议尽量明确导入所
-
随着软件开发项目越来越庞大,代码管理的难度也越来越大,特别是在团队协作中。Git作为目前最流行的代码版本控制工具之一,可以帮助我们高效地管理代码版本,并且很容易集成到团队的工作流中。在Git中,我们经常会遇到需要将新增的文件夹排除在Git的库之外的情况。这些文件夹可能是临时生成的文件夹、缓存文件夹或
-
1.迁移已有的Gitlab代码仓库存储目录gitlab通过rpm包安装后,默认存储位置在/var/opt/gitlab/git-data/repositories,通常需要更改此路径到单独的一个分区来存储仓库的数据。例如,我这里把数据存放到/data/gitlab目录下,创建/data/gitlab
学习大纲
1.14 Git分支中冲突的处理