git 分支 创建 分支冲突与解决
git 分支创建 分支冲突与解决
- 分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
- 在版本控制中,使用多条分支同时推进多个任务。可以用于添加功能、测试版本、以及不停机热修复
- 多个分支可以并行开发,相互不耽误、相互不影响,提高开发效率
- 分支功能开发失败也能直接删除,不影响其他分支及主线
flowchart LR
id1[(master1.1)] -- 主体版本更新 --> id2[(master1.2)]----> id3[(master1.3)]
id1[(master1.1)] -. 新功能 .-> id21{{branch1.1.2}}-. 新功能 .-> id22{{branch1.1.3}}
id1[(master1.1)] -. 测试版本 .-> id31>branch1.1.6]-. 测试版本 .-> id32>branch1.1.7]
id22--合并--oid2
id32 --合并--oid2
id2 -.hot_fix.->id4[[branch修复版本]]--合并--oid3
分支操作
分支查看创建切换
-
首先创建b1.txtx测试文件,并提交到仓库区
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git add b1.txt SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git commit -m "创建b1测试文件" b1.txt [master 141b724] 创建b1测试文件 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 b1.txt
-
查看分支
git branch -v
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git branch -v * master 141b724 创建b1测试文件
-
创建分支
git branch [branchname]
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git branch branch01 SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git branch -v branch01 141b724 创建b1测试文件 * master 141b724 创建b1测试文件 # *号显示当前所在位置
-
切换分支
git checkout [branchname]
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git checkout branch01 Switched to branch 'branch01' M gt03.txt SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git branch -v * branch01 141b724 创建b1测试文件 master 141b724 创建b1测试文件
分支冲突与解决
-
进入
branch01
分支后添加内容并提交SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git add b1.txt SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git commit -m "b1分支修改文件" b1.txt [branch01 87a8a24] b1分支修改文件 1 file changed, 1 insertion(+) SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git branch -v * branch01 87a8a24 b1分支修改文件 master 141b724 创建b1测试文件
master
索引号未发生改变,而branch01
已变更
-
此时切换回
master
分支,发现b1
已经恢复为最初创建的版本,在master
上对文件进行修改SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git add b1.txt SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git commit -m "b1分支修改文件" b1.txt [branch01 87a8a24] b1分支修改文件 1 file changed, 1 insertion(+) SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git branch -v branch01 87a8a24 b1分支修改文件 * master 197cfea master修改文件
-
再次切换到
branch01
分支SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git checkout branch01 Switched to branch 'branch01' SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git branch -v * branch01 87a8a24 b1分支修改文件 master 197cfea master修改文件
文件中的内容又改回来了
-
git merge [branchname]
分支合并,切换回master
,随后合并branch01
,由于在同一个文件的同一个位置修改内容,会发生冲突,这要靠人自行商议解决SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (branch01) $ git checkout master Switched to branch 'master' SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $ git merge branch01 Auto-merging b1.txt CONFLICT (content): Merge conflict in b1.txt Automatic merge failed; fix conflicts and then commit the result. SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master|MERGING) $ cat b1.txt <<<<<<< HEAD master增加内容 ======= b1分支增加内容 >>>>>>> branch01
吵完架确定好内容后再提交,冲突即可解决
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master|MERGING) $ git add b1.txt SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master|MERGING) $ git status On branch master All conflicts fixed but you are still merging. # 所有冲突都已解决,但您仍在合并中。 (use "git commit" to conclude merge) # 使用“git commit”结束合并) Changes to be committed: modified: b1.txt SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master|MERGING) $ git commit -m "b1分支冲突解决" # 此处不可加文件名 [master d2b6b04] b1分支冲突解决 SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master) $