糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > git 合并冲突_git分支管理的策略和冲突问题

git 合并冲突_git分支管理的策略和冲突问题

时间:2022-05-18 09:14:34

相关推荐

git 合并冲突_git分支管理的策略和冲突问题

备注:

知识点

关于分支中的冲突

分支管理的策略

分支策略

备注:

本文参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。

知识点

git log --graph --pretty=oneline --abbrev-commit查看分支合并情况

git log --graph查看分支合并图

当两个分支修改同一个文件时,可能发生两个分支不能自动合并的问题,需要手动解决冲突(合并时,Git将冲突标识了出来),然后再次提交,即可完成合并。

使用参数--no-ff禁用快合并模式,git merge --no-ff -m"merge with no-ff" dev,合并

关于分支中的冲突

如下,新建一个分支dev2,并且在新分支上开发:

$ git checkout -b dev2

切换到一个新分支 'dev2'

修改readme.txt,添加一行。

Creating a new branch is quick AND simple.

在dev2分支进行提交,

$ git add readme.txt

$ git commit -m"add new line at readme on dev2"

[dev2 4a097db] add new line at readme on dev2

1 file changed, 1 insertion(+)

切换到master分支,同时在master上修改readme文件(添加域dev2分支上文件不同的内容,Creating a new branch is quick & simple.),并且提交

git checkout master

切换到分支 'master'

您的分支领先 'origin/master' 共 1 个提交。

(使用 "git push" 来发布您的本地提交)

$ git add readme.txt

$ git commit -m"add new line at readme on master"

[master d562bf7] add new line at readme on master

1 file changed, 1 insertion(+)

如上,Git会自动提示当前master分支比远程origin/master分支领先一个提交

现在master分支和dev2 分支都有了各自新的提交,在这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,由于同时都修改了同一行内容,此时会有冲突。

$ git merge dev2

自动合并 readme.txt

冲突(内容):合并冲突于 readme.txt

自动合并失败,修正冲突然后提交修正的结果。

Git提示自动合并存在冲突,冲突文件是readme,需要修正冲突然后提交修正后的结果

如果用git status查看看当前状态

$ git status

位于分支 master

您的分支领先 'origin/master' 共 2 个提交。

(使用 "git push" 来发布您的本地提交)

您有尚未合并的路径。

(解决冲突并运行 "git commit")

未合并的路径:

(使用 "git add ..." 标记解决方案)

双方修改:readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

如上,提示双方修改

查看readme.txt的内容

$ cat readme.txt

`this is a test that I learn and use git version control system

this is a beginning

wofaidognyixie dognxi

create two new branch

<<<<<<< HEAD

Creating a new branch is quick & simple.

=======

Creating a new branch is quick AND simple.

>>>>>>> dev2

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存

Creating a new branch is quick and simple.

修改冲突后提交

$ git add readme.txt

$ git commit -m"conflict fixed"

[master 8f69de8] conflict fixed

Git提示冲突已经修复,现在masterdev2分支均指向了现在工作区的状态。

使用git log --graph --pretty=oneline --abbrev-commit可以查看分支的合并情况

$ git log --graph --pretty=oneline --abbrev-commit

* 8f69de8 conflict fixed

|\

| * 4a097db add new line at readme on dev2

* | d562bf7 add new line at readme on master

|/

* 03d07d2 modify readme.txt at branch

* 036ced2 a push test

* 6a0f133 remove test.txt

* b5c87d4 add a test file

* d5b84bf modifya readme file

* 3033dda add a readme file

如上,分支合并和冲突记录

此时可以删除dev2分支

$ git branch -d dev2

已删除分支 dev2(曾为 4a097db)。

冲突解决完成

分支管理的策略

通常,合并分支时Git使用Fast forward模式快速合并。但是快速模式删除分支,会丢失分支信息。

强制禁用Fast forward模式,Git会将merge记录为一个新的提交,同时分支历史会记录分支信息。

切换到dev分支,并修改readme文件,同时提交commit

$ git checkout -b dev

切换到一个新分支 'dev'

$ git add readme.txt

$ git commit -m"a new branch"

[dev 44dffc0] a new branch

1 file changed, 1 insertion(+)

切换到master分支

$ git checkout master

切换到分支 'master'

您的分支领先 'origin/master' 共 4 个提交。

(使用 "git push" 来发布您的本地提交)

使用--no-ff参数合并分支dev到当前master,本次合并要创建一个新的commit,所以加上-m参数描述

$ git merge --no-ff -m"merge with no-ff" dev

Merge made by the 'recursive' strategy.

readme.txt | 1 +

1 file changed, 1 insertion(+)

使用git log查看分支合并图

$ git log --graph --pretty=oneline --abbrev-commit

* 7c4d427 merge with no-ff

|\

| * 44dffc0 a new branch

|/

* 8f69de8 conflict fixed

|\

| * 4a097db add new line at readme on dev2

* | d562bf7 add new line at readme on master

|/

* 03d07d2 modify readme.txt at branch

* 036ced2 a push test

* 6a0f133 remove test.txt

* b5c87d4 add a test file

* d5b84bf modifya readme file

* 3033dda add a readme file

分支策略

实际开发中,分支管理应按照以下几点:

master分支是稳定分支,用来发布最新稳定版本,开发中不需要修改它

开发中尽量在dev中开发,扩展新功能、修复bug等,等到正式版发布时,在将dev分支合并到master上。

开发人员在dev分支上开发,每个人都有自己的分支,并且往dev分支上合并。

团队合作分支开发

参考

Git教程:/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

如果觉得《git 合并冲突_git分支管理的策略和冲突问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。