Git的分支什么是分支()?
有分支就有主干,分支就是主干分离出来的枝干(好像废话呀),我们在实际开发项目的时候,会有一个主干(其实也是个分支,跟其他分支没有区别),可能这是跟生产代码完全一致。但是有一天可能需要上一个新的需求,直接在主分支上修改提交代码,可能就有问题了,有哪些问题呢?比如:这些需求可能在开发过程中,还未完全测试。放到了主分支,被打包上线怎么办(现今可是常规操作。);再比如即便代码测试完成,但是并没有确定什么时候上线呀。诸如此类都是问题。
那么分支就解决了上面这些问题。比如主分支叫做main,开发过程中可以创建一个dev分支。该功能开发测试都在这个分支,测试通过没有问题,并且确定要上线该功能的时候就可以将dev分支合并到主分支main。
查看分支
使用git 查看分支,他也支持很多参数,下面使用下常用的参数
# git branch 查看分支
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git branch
* main
# [-v | --verbose] 该参数会将最后一次提交日志列出来
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git branch -v
* main 8961921 第一次提交itlab1024.txt(after reset)
# [-r | --remotes]列出远端分支信息,因为我还未提交到远端,所以是空的
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git branch -r
创建分支
创建分支使用git 分支名
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git branch dev
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git branch -v
dev 8961921 第一次提交itlab1024.txt(after reset)
* main 8961921 第一次提交itlab1024.txt(after reset)
我通过git dev创建了一个dev分支,因为我是在main分支下创建的dev分支,所以dev分支的代码跟main的一样。
切换分支
切换分支使用git 分支名
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git checkout dev
Switched to branch 'dev'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
可以看到开始我是在main分支下,然后使用,切换到了dev分支下。
合并创建和切换
创建分支和合并分支可以一步操作,使用git -b 分支名
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git branch -D dev
Deleted branch dev (was 8961921).
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git checkout -b dev
Switched to a new branch 'dev'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
修改分支代码
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
$ vim itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
$ cat itlab1024.txt
dev001
然后提交分支代码
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
$ git add .
warning: in the working copy of 'itlab1024.txt', LF will be replaced by CRLF the next time Git touches it
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
$ git commit -m "第一次提交dev分支代码"
[dev 298d140] 第一次提交dev分支代码
1 file changed, 1 insertion(+)
对比main和dev分支代码和日志
现在dev的分支
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
$ cat itlab1024.txt
dev001
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
$ git log
commit 298d1408123e278e59b0022f3690a5f3241db8ee (HEAD -> dev)
Author: Eleven
Date: Sun Nov 6 14:48:51 2022 +0800
第一次提交dev分支代码
commit 89619218aa9638434fd92338fe74cfb1b27d9373 (main)
Author: Eleven
Date: Sat Nov 5 20:48:13 2022 +0800
第一次提交itlab1024.txt(after reset)
再看下main分支
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev)
$ git checkout main
Switched to branch 'main'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ cat itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git log
commit 89619218aa9638434fd92338fe74cfb1b27d9373 (HEAD -> main)
Author: Eleven
Date: Sat Nov 5 20:48:13 2022 +0800
第一次提交itlab1024.txt(after reset)
对比结果:
Merge(合并分支)
当dev分支开发完毕,测试通过了,那么需要合并到main分支,要发布生产环境了呀。
合并分支使用git merge。
使用说明:当前分支 执行git merge其他分支,结果就是将其他分支的内容合并到了当前分支。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git merge dev
Updating 8961921..298d140
Fast-forward
itlab1024.txt | 1 +
1 file changed, 1 insertion(+)
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git log
commit 298d1408123e278e59b0022f3690a5f3241db8ee (HEAD -> main, dev)
Author: Eleven
Date: Sun Nov 6 14:48:51 2022 +0800
第一次提交dev分支代码
commit 89619218aa9638434fd92338fe74cfb1b27d9373
Author: Eleven
Date: Sat Nov 5 20:48:13 2022 +0800
第一次提交itlab1024.txt(after reset)
可以看到我在main分支下执行git merge dev,结果就是main分支下有了dev分支下的提交。
这里为了演示清晰,我重新创建一个dev02的分支
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git checkout -b dev02
Switched to a new branch 'dev02'
依然是修改下.txt的代码,并提交到本地库
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ vim itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ cat itlab1024.txt
dev001
dev02-update
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ git add .
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ git commit -m "dev02分支的第一次提交"
[dev02 f33a145] dev02分支的第一次提交
1 file changed, 1 insertion(+)
冲突问题
上面演示的时候,使用merge,很顺利,没有发生冲突,但是实际开发中,可能会产生冲突的问题。
那么冲突产生的场景是什么呢?两个分支在同一个文件同一个位置进行了不同的修改就会产生冲突。此时git就不知道该哪个分支的代码了,必须要工作人员自己去修改。
首先看下main的.txt的内容
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ cat itlab1024.txt
dev001
dev02-update
再看下dev02的.txt的内容
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git checkout dev02
Switched to branch 'dev02'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ cat itlab1024.txt
dev001
dev02-update
连个分支的.txt的内容是一样的。
现在要做一个操作。我在main分支中修改.txt的第一行代码为a,在dev02分支中的.txt的第一行代码修改为b。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ vim itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ cat itlab1024.txt
b
dev02-update
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ git commit -am "dev02分支修改第一行代码"
[dev02 cc50229] dev02分支修改第一行代码
1 file changed, 1 insertion(+), 1 deletion(-)
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ git checkout main
Switched to branch 'main'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ vim itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ cat itlab1024.txt
a
dev02-update
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git commit -am "修改main分支中的itlab1024.txt的第一行代码为a"
[main 42fabbe] 修改main分支中的itlab1024.txt的第一行代码为a
1 file changed, 1 insertion(+), 1 deletion(-)
修改完毕后,我们来看下main分支和dev02分支的日志
main:
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git log
commit 42fabbe3631c3ad0ff3c3ebcbe53b3979a7c3077 (HEAD -> main)
Author: Eleven
Date: Sun Nov 6 15:16:28 2022 +0800
修改main分支中的itlab1024.txt的第一行代码为a
commit f33a14526d17660053d5290b112060ebe7c8de4d
Author: Eleven
Date: Sun Nov 6 15:00:49 2022 +0800
dev02分支的第一次提交
commit 298d1408123e278e59b0022f3690a5f3241db8ee (dev)
Author: Eleven
Date: Sun Nov 6 14:48:51 2022 +0800
第一次提交dev分支代码
commit 89619218aa9638434fd92338fe74cfb1b27d9373
Author: Eleven
Date: Sat Nov 5 20:48:13 2022 +0800
第一次提交itlab1024.txt(after reset)
dev02:
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git checkout dev02
Switched to branch 'dev02'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ git log
commit cc50229a0c6479eeebbf355febbb4119d0f8b4a0 (HEAD -> dev02)
Author: Eleven
Date: Sun Nov 6 15:15:04 2022 +0800
dev02分支修改第一行代码
commit f33a14526d17660053d5290b112060ebe7c8de4d
Author: Eleven
Date: Sun Nov 6 15:00:49 2022 +0800
dev02分支的第一次提交
commit 298d1408123e278e59b0022f3690a5f3241db8ee (dev)
Author: Eleven
Date: Sun Nov 6 14:48:51 2022 +0800
第一次提交dev分支代码
commit 89619218aa9638434fd92338fe74cfb1b27d9373
Author: Eleven
Date: Sat Nov 5 20:48:13 2022 +0800
第一次提交itlab1024.txt(after reset)
可以看到两个分支的最后一次提交是不同的main的 id = , dev02的 id = 。
接下来我切换到main分支,使用merge进行合并。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (dev02)
$ git checkout main
Switched to branch 'main'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git merge dev02
Auto-merging itlab1024.txt
CONFLICT (content): Merge conflict in itlab1024.txt
Automatic merge failed; fix conflicts and then commit the result.
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main|MERGING)
$ git status
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add ..." to mark resolution)
both modified: itlab1024.txt
no changes added to commit (use "git add" and/or "git commit -a")
可以看到提示了这样一句话, (): Merge in .txt。这就是说代码冲突了,需要认为干预,使用git 也一样会冲突,这里就不演示了。
解决冲突
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main|MERGING)
$ git status
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add ..." to mark resolution)
both modified: itlab1024.txt
no changes added to commit (use "git add" and/or "git commit -a")
使用vim打开文件
可以看到main里的a和dev02分支提交的b都在这里。那么这里就需要手动处理了。比如我就想保留main分支的a,不要dev分支的b。可以修改为如下内容:
这里要说明下,要保留什么内容你自己觉得,比如你既不想要a也不想要保留b了,就填写个xxx可以不?完全可以。
还要注意解决冲突,要把里面的
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666