目录
备注:
知识点
关于分支中的冲突
分支管理的策略
分支策略
备注:
本文参考于廖雪峰老师的博客 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 提示冲突已经修复, 现在 master 和 dev2 分支均指向了现在工作区的状态.
使用
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 分支上合并.
来源: https://www.cnblogs.com/codemissing/p/git_branch_manage_conflict.html