git分支 & git标签

一、git分支

1.什么是分支

`分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接提交到git仓库中,
又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫”拍照功  能”的分支,这种分支只会属于你自己,
而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这样即能保证代码不丢失,又不影响其他人的工作。

2.分支的操作

1)查看 当前分支

`一般在实际的项目开发中,我们要尽量保证master分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,
而工作的时候则可以新建不同的工作分支,等到工作完成后在合并到master分支上面,所以团队的合作分支看起来会像上面图那样。`
[root@git git_data]# git log --oneline  --decorate
3044a5a (HEAD, master) 错误的提交		#HEAD表示指针,master表示主分支,默认分支指向你最后一次的提交 HEAD头、指针
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

2)查看所有分支

[root@git git_data]# git branch 
* master		# * 表示当前所在的分支 

3)创建分支

[root@git git_data]# git branch test		# 新建test分支
[root@git git_data]# git branch 
* master
  test
[root@git git_data]# git branch dev
[root@git git_data]# git branch 
  dev
* master
  test

4)切换分支

[root@git git_data]# git checkout test		        # 切换至test分支
Switched to branch 'test'
[root@git git_data]# git branch 			# 查看分支处于test中
  dev
  master
* test
[root@git git_data]# git checkout dev
Switched to branch 'dev'
[root@git git_data]# git branch 
* dev
  master
  test

#如果当前分支有未提交的内容,不允许切换分支
[root@git git_data]# git checkout test
error: Your local changes to the following files would be overwritten by checkout:
	master
Please, commit your changes or stash them before you can switch branches.
Aborting

5)使用分支

#1.主分支创建文件并提交到本地仓库
[root@git git_data]# touch master
[root@git git_data]# git add master
[root@git git_data]# git commit -m "测试主分支提交代码"

#2.切换到dev分支,查看工作区域,没有主分支创建的文件
[root@git git_data]# git checkout dev
[root@git git_data]# git branch 
* dev
  master
  test
[root@git git_data]# ll
-rw-r--r-- 1 root root 4 Sep 17 17:40 3

#3.普通分支创建文件并提交到本地仓库
[root@git git_data]# touch dev
[root@git git_data]# ll
total 4
-rw-r--r-- 1 root root 4 Sep 17 17:40 3
-rw-r--r-- 1 root root 0 Sep 21 22:52 dev
[root@git git_data]# git add dev
[root@git git_data]# git commit -m "测试dev分支提交代码"
 
#4.切换到主分支查看
[root@git git_data]# git checkout master
Switched to branch 'master'
[root@git git_data]# ll
total 4
-rw-r--r-- 1 root root 4 Sep 17 17:40 3
-rw-r--r-- 1 root root 0 Sep 21 22:53 master

6)合并分支

#切换到主分支
[root@git git_data]# git branch 
  dev
* master
  test
#合并dev分支的代码
[root@git git_data]# git merge dev

#查看内容(主分支中多了dev分支中的内容)
[root@git git_data]# ll
total 8
-rw-r--r-- 1 root root 4 Sep 17 17:40 3
-rw-r--r-- 1 root root 0 Sep 21 22:58 dev
-rw-r--r-- 1 root root 0 Sep 21 22:58 master

#切换回dev分支,修改代码内容
[root@git git_data]# git checkout dev
[root@git git_data]# echo dev > dev 

#再次切换回主分支,代码自动更新
[root@git git_data]# git checkout master
[root@git git_data]# ll
total 8
-rw-r--r-- 1 root root 4 Sep 17 17:40 3
-rw-r--r-- 1 root root 4 Sep 21 22:58 dev
-rw-r--r-- 1 root root 0 Sep 21 22:58 master

#查看git提交日志
[root@git git_data]# git log --oneline --decorate
131f703 (HEAD, master) Merge branch 'dev'
4566cb6 (dev) 测试dev分支提交代码
525099c 测试主分支提交代码
3044a5a (test) 错误的提交			#test没有任何操作,所以停留在最后操作的时间点
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

7)合并冲突

#在主分支创建一个文件并提交到本地仓库
[root@git git_data]# git branch 
* master
  test
[root@git git_data]# echo master > master 
[root@git git_data]# git add .
[root@git git_data]# git commit -m '删除开发使用的分支及数据'
 
#切换到普通分支,创建一个与主分支相同名字的文件
[root@git git_data]# git checkout test
[root@git git_data]# echo 1111 > master

#提交普通分支的文件到本地仓库
[root@git git_data]# git add .
[root@git git_data]# git commit -m "在test分支创建一个与主分支一样的文件"

#回到主分支进行分支合并
[root@git git_data]# git checkout master
[root@git git_data]# ll
total 8
-rw-r--r-- 1 root root 4 Sep 17 17:40 3
-rw-r--r-- 1 root root 7 Sep 21 23:11 master
[root@git git_data]# git merge test
Auto-merging master
CONFLICT (add/add): Merge conflict in master
Automatic merge failed; fix conflicts and then commit the result.

#编辑冲突的文件,删除没有用的内容,保留需要代码
[root@git git_data]# vim master 
[root@git git_data]# git add .
[root@git git_data]# git commit -m "解决分支合并冲突"
[master 6f9367c] 解决分支合并冲突

#解决分支合并,如果有修改内容需要再次合并

8)删除分支

# 当分支已经和主分支合并,那可以对分支进行删除处理
[root@git git_data]# git branch -d dev
Deleted branch dev (was 4566cb6).
[root@git git_data]# git branch
* master
  test

二、git标签

Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v2.0等等)。
当需要进行回滚操作可直接使用标签名进行回滚,便于记忆,无需使用id。

1.打标签

1)查看提交

[root@git git_data]# git log --oneline --decorate
6f9367c (HEAD, master) 解决分支合并冲突
a2993b3 在test分支创建一个与主分支一样的文件
70c9ada 删除开发使用的分支及数据
131f703 Merge branch 'dev'
4566cb6 测试dev分支提交代码
525099c 测试主分支提交代码
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

2)打标签

[root@git git_data]# git tag -a 2.0 -m "解决分支合并冲突以后的标签"

-a		#指定标签的名字
-m		#给标签加注释,也就是指定说明文字

#当没有指定标签打在那一次更新上,默认将标签打在最近一次提交的上面
[root@git git_data]# git log --oneline --decorate
6f9367c (HEAD, tag: 2.0, master) 解决分支合并冲突
a2993b3 在test分支创建一个与主分支一样的文件
70c9ada 删除开发使用的分支及数据
131f703 Merge branch 'dev'
4566cb6 测试dev分支提交代码
525099c 测试主分支提交代码
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

3)给指定提交打标签

[root@git git_data]# git tag -a v1.0 4566cb6 -m "测试给指定提交打标签"
[root@git git_data]# git tag
2.0
v1.0

[root@git git_data]# git log --oneline --decorate
6f9367c (HEAD, tag: 2.0, master) 解决分支合并冲突
a2993b3 在test分支创建一个与主分支一样的文件
70c9ada 删除开发使用的分支及数据
131f703 Merge branch 'dev'
4566cb6 (tag: v1.0) 测试dev分支提交代码
525099c 测试主分支提交代码
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

2.查看标签

[root@git git_data]# git tag
2.0
[root@git git_data]# git show v1.0   # 查看v1.0的信息  git show 加标签查看

3.根据标签回滚

#使用提交的ID进行回滚
[root@git git_data]# git reset --hard 3044a5a
HEAD is now at 3044a5a 错误的提交
[root@git git_data]# git log --oneline --decorate
3044a5a (HEAD, master) 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
[root@git git_data]# ll
total 4
-rw-r--r-- 1 root root 4 Sep 17 17:40 3

#使用标签进行回滚
[root@git git_data]# git log --oneline --decorate
3044a5a (HEAD, master) 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
[root@git git_data]# git reflog			#(可对回滚标签查看)
[root@git git_data]# git reset --hard v1.0
HEAD is now at 4566cb6 测试dev分支提交代码
[root@git git_data]# git log --oneline --decorate
4566cb6 (HEAD, tag: v1.0, master) 测试dev分支提交代码
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

[root@git git_data]# git reset --hard 2.0
[root@git git_data]# git log --oneline --decorate
6f9367c (HEAD, tag: 2.0, master) 解决分支合并冲突
a2993b3 在test分支创建一个与主分支一样的文件
70c9ada 删除开发使用的分支及数据
131f703 Merge branch 'dev'
4566cb6 (tag: v1.0) 测试dev分支提交代码
525099c 测试主分支提交代码
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

4.删除标签

#删除标签
[root@git git_data]# git tag -d 2.0
Deleted tag '2.0' (was ed07882)
[root@git git_data]# git tag 
v1.0
[root@git git_data]# git log --oneline --decorate
6f9367c (HEAD, master) 解决分支合并冲突
a2993b3 在test分支创建一个与主分支一样的文件
70c9ada 删除开发使用的分支及数据
131f703 Merge branch 'dev'
4566cb6 (tag: v1.0) 测试dev分支提交代码
525099c 测试主分支提交代码
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
原文地址:https://www.cnblogs.com/tcy1/p/13708385.html