分支
什么是分支?
软件项目中启动一套单独的开发线的方法,多分支并行开发,互不干扰。开发,测试完成后可以合并到主分支上。
为什么使用git分支?
1、可以很好的避免版本兼容开发的问题,避免不同版本之间的相互影响
2、封装一个开发阶段
3、解决bug的时候新建分支,用于对该bug的研究
相关命令
新建分支:
root@DESKTOP-33IBDMI:/mnt/e/git# git branch dev
列出项目所有分支:
root@DESKTOP-33IBDMI:/mnt/e/git# git branch
dev
* master #分支前面有*号,代表该分支为当前所在分支
删除分支
root@DESKTOP-33IBDMI:/mnt/e/git# git branch -d dev
更改分支名
root@DESKTOP-33IBDMI:/mnt/e/git# git branch
bug
* master
root@DESKTOP-33IBDMI:/mnt/e/git# git branch -m bug dev #bug为旧分支名,dev为新分支名
root@DESKTOP-33IBDMI:/mnt/e/git# git branch
dev
* master
切换分支
root@DESKTOP-33IBDMI:/mnt/e/git# git branch
dev
* master
root@DESKTOP-33IBDMI:/mnt/e/git# git checkout dev #切换到dev分支
Switched to branch 'dev'
root@DESKTOP-33IBDMI:/mnt/e/git# git branch
* dev
master
注意:切换分支时,如果对分支上的文件进行修改,且没有commit,就切换到另一个分支上,这时会报错。当然可以加 -f 参数强制切换到另外的分支上,但当前分支上的变更会直接丢弃,一般不建议使用此参数。
实例:
root@DESKTOP-33IBDMI:/mnt/e/git# git branch
dev
* master
root@DESKTOP-33IBDMI:/mnt/e/git# ls
11.txt
root@DESKTOP-33IBDMI:/mnt/e/git# git checkout dev
Switched to branch 'dev'
root@DESKTOP-33IBDMI:/mnt/e/git# ls
11.txt
root@DESKTOP-33IBDMI:/mnt/e/git# touch 22.txt
root@DESKTOP-33IBDMI:/mnt/e/git# git add *
root@DESKTOP-33IBDMI:/mnt/e/git# git commit -m "add 22.txt"
[dev 461c95c] add 22.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 22.txt
root@DESKTOP-33IBDMI:/mnt/e/git# ls
11.txt 22.txt
root@DESKTOP-33IBDMI:/mnt/e/git# git checkout master
Switched to branch 'master'
root@DESKTOP-33IBDMI:/mnt/e/git# ls
11.txt
合并分支:
root@DESKTOP-33IBDMI:/mnt/e/git# git branch
dev
* master
root@DESKTOP-33IBDMI:/mnt/e/git# git merge dev #当前分支合并指定分支
Updating ef5b5ee..461c95c
Fast-forward
11.txt | 1 +
22.txt | 0
2 files changed, 1 insertion(+)
create mode 100644 22.txt
root@DESKTOP-33IBDMI:/mnt/e/git# ls
11.txt 22.txt
注意:master切换到dev分支,对a文件修改后提交,再切换回master分支,也对a修改后提交,然后在master分支merge dev分支,此时会产生冲突。
查看冲突的文件:git diff –name-only –diff-filter=U
Git diff
使用场景
1、解决冲突
2、制作补丁
相关命令
root@DESKTOP-33IBDMI:/mnt/e/git# cat 22.txt
sdfsd
root@DESKTOP-33IBDMI:/mnt/e/git# echo werwer >>22.txt
root@DESKTOP-33IBDMI:/mnt/e/git# git add 22.txt
root@DESKTOP-33IBDMI:/mnt/e/git# echo lkkll >>22.txt
root@DESKTOP-33IBDMI:/mnt/e/git# git diff #用于比较当前工作区跟暂存区的差异
diff --git a/22.txt b/22.txt
index aa41325..9d15487 100644
--- a/22.txt # - 表示变更前的文件
+++ b/22.txt # + 表示变更后的文件
@@ -1,2 +1,3 @@ #在源文件第1行开始的2行和目标文件第1行开始的3行构成一个差异小结
sdfsd
werwer
+lkkll
root@DESKTOP-33IBDMI:/mnt/e/git# git diff --staged #查看存入到暂存区,没提交到本地仓库的修改
diff --git a/22.txt b/22.txt
index e69de29..aa41325 100644
--- a/22.txt
+++ b/22.txt
@@ -0,0 +1,2 @@
+sdfsd
+werwer
root@DESKTOP-33IBDMI:/mnt/e/git# git commit -m "s w"
root@DESKTOP-33IBDMI:/mnt/e/git# git diff HEAD 22.txt #比较的是工作区中的文件与版本库中文件的差异。HEAD指向的是版本库中的当前版本,而22.txt指的是当前工作区中的文件,也可以不具体指定
diff --git a/22.txt b/22.txt
index aa41325..d05c57f 100644
--- a/22.txt
+++ b/22.txt
@@ -1,2 +1,4 @@
sdfsd
werwer
+lkkll
+sdfklkj
root@DESKTOP-33IBDMI:/mnt/e/git# git diff dev #当前分支与dev分支的差异
git diff 分支名1 分支名2 #查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别
git diff commitid1 commitid2 #用于列出两个历史提交的差异
git diff --stat #用于罗列有变更的文件