Git工具详解完整版

Git工具详解

Git****工具

命令行

● 源生名两行,才能使用git所有命令,会git命令再去用gui图像工具,完全无压力

● GUI图形软件,只是实现了git的部分功能,以减免操作难度,难以记住git源生命令

● 不同的人会有不同的GUI图形工具,但是所有人用的git原生命令都一样,推荐学习命令

Windows****安装

在windows上使用git可以从git官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”-> “Git Bash”,蹦出一个类似命令行窗口的东西,就说明git安装成功!

在Mac上安装

在mac安装git方式很多,最简单时用brew包管理

安装homebrew,然后通过homenbrew安装Git,具体方法请参考homebrew的文档https://brew.sh/.

brew install git

如果想要更新的版本,可以使用二进制安装程序,官方维护的OSX Git安装程序可以在Git官方网站下载,网址为http://git-scm.com/downloads

在Linux上安装

如果你想在Linux上用二进制安装程序来安装Git,可以使用发航班包含的基础软件包管理工具来安装,如果以centos上为例你可以使用yum

sudo yum install git

如果你基于Debian的发行上,请尝试用apt-get

sudo apt-get install git

环境准备准备好一台Linux机器,且进行环境初始化,主机名‘yum源,安装基础软件包、关闭防火墙、同步系统时间等

安装git

[root@lb02 ~]# yum install git -y

[root@lb02 ~]# git --version

git version 1.8.3.1
运行git前的配置

既然已经安装在系统上安装了git,你会想要做几件事来定制你的git环境,每台计算机上只需要配置一次,程序升级时保留配置信息,你可以在任何时候再次通过运行命令行来修改它们

Git自带一个git config的工具来帮助设置控制git外观的配置变量。这些变量存储在三个不同的位置

这个用户指的时Linux用户

三种环境参数

● --system

● –global

● –local

● /etc/gitconfig文件:包含系统上每一个用户他们仓库的通用配置。如果使用带有—system选项的git config时,它会从此文件读写配置变量

● ~/.gitconfig或 ~/.config/git/config 文件:只针对当前用户。可以传递—global选项让Git读写此文件

● 当前使用仓库的Git目录中的config文件(就是 .git/config):针对该仓库。–local当前仓库配置

用户信息配置
通常git,只需要配置好你是谁,你的邮箱,这样就知道时谁提交代码了
[root@lb02 ~]# git config --global user.name "dh"
[root@lb02 ~]# git config --global user.email "437196165@qq.com"
[root@lb02 ~]# git config --global color.true
我们这里配置的时—global参数,因此是在用户家目录下,可以查看
root@lb02 ~]# cat .gitconfig 
[user]
	 name = dh
	 email = 437196165@qq.com
[color]
	 ui = true

Git配置相关命令
yum install git -y  安装git
git --version  查看git版本
git config --system --list 查看系统所有linux用户的通用配置,此命令检查/etc/gitconfig
git config --global --list 查看当前linux用户的配置,检查~/.gitconfig文件
git config --local --list 查看git目录中的仓库配置文件,.git/config文件
git config --global user.name "pyyu"  配置当前linux用户全局用户名,这台机器所有git仓库都会用这个配置
git config --global user.email "yc_uuu@163.com"  配置当前linux用户全局邮箱
git config --global color.ui true 配置git语法高亮显示
git config --list 列出git能找到的所有配置,从不同的文件中读取所有结果
git config user.name  列出git某一项配置
git help 获取git帮助
man git man手册
git help config 获取config命令的手册
Git核心原理

Git****工作流程

使用git就是将本地文(gong做目录workspace)的文件,添加到暂存区(stage),然后提交到本地仓库(repository),最终可以协同开发,推送到远程仓库(remote)。

image-20200706152248954

Git实践

版本库,也叫git库(repository),也就是一个文件夹

这个目录的所以内容被git软件管理,所有的修改,删除,git都会被跟踪记录,便于可以跟踪历史记录,以后还原文件

三种场景需求

1.把已有的项目代码,纳入git管理
[root@lb02 ~]# mkdir /mysite
[root@lb02 ~]# cd /mysite/      #项目所在代码
[root@lb02 mysite]# git init       初始化git仓库 
Initialized empty Git repository in /mysite/.git/
git init命令会创建一个.git隐藏子目录,这个目录包含初始化git仓库所有的核心文件。
此步仅仅是初始化,此时项目里的代码还没有被git跟踪,因此还需要git add对项目文件跟踪,然后git commit提交到本地仓库
请看git原理 >Git 内部原理
2.新建一个项目,直接用git管理
cd 某个文件夹
git init mysite      此步会在当前路径创建mysite文件夹,mysite文件夹中包含了.git的初始化文件夹,所有配置
ps:git原理
git这个目录
[root@lb02 mysite]# tree .git/
.git
├── branches
├── config    这个项目独有的配置
├── description
├── HEAD    head文件指示目前被检出的分支
├── hooks  hooks目录包含服务端和客户端的钩子脚本 hook scripts
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index  index文件保存暂存区的信息,只有git add之后才会生成,默认还没有这个文件
├── info    info目录是全局性排除文件,用于放置不想被记录在.gitignore文件中的忽略模式(ignored patterns)
│   └── exclude
├── objects  存储所有数据内容
│   ├── info
│   └── pack
└── refs  refs目录存储指向数据(分支)的提交对象的指针
    ├── heads
    └── tags

.git文件夹解析
3.获取远程代码仓库代码
如果你想获取github上的代码,或者你公司gitlab私有仓库的代码,可以使用git clone命令,下载克隆远程仓库的代码。
git clone https://github.com/django/django.git
下载出来的代码已经是被git管理的本地仓库
你会发现所有的项目文件都在这里,等待后续开发

Git生命周期演练

Git****工作区

在我们进行git init mygit初始化一个git项目时,这个mygit文件,就是一个工作区(working Diectory)

Git****仓库

工作区里有一个git隐藏文件夹,就是git的本地仓库

Git文件夹有一个index文件,就是git的暂存区,也叫做stage

Git文件夹里的HEAD文件就是git的一个指针

Git命令生成一个工作区,也就是git对该文件进行管理了
1.生成git工作区
[root@lb02 mysite]# git init
Initialized empty Git repository in /mysite/.git/ 
2.查看git工作区中的本地仓库
. git这个隐藏文件夹,就是git的本地仓库了 
[root@lb02 mysite]# ls -a
.  ..  .git
3.查看工作区的信息(查看文件按的变动状态,为跟踪,已跟踪)
#该命令是gitde 核心命令,你可以随时随地的查看git工作区的状态信息
#请经常使用git status命令掌握git工作区的时态
[root@lb02 mysite]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track) 
4.在工作区,进行文件创建,发生一些变化
[root@lb02 mysite]# echo 'print("挣了一个亿")' > main.py
[root@lb02 mysite]# git status    #此时git会提示你,是否要git add 添加到暂存区
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	main.py
nothing added to commit but untracked files present (use "git add" to track)
5.确保要添加,跟踪文件
[root@lb02 mysite]# git add main.py
[root@lb02 mysite]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   main.py 
6.git会问你,是否要提交到本地仓库
[root@lb02 mysite]# git commit -m "echo main.py" 
[master (root-commit) 78a2ecb] echo main.py
 1 file changed, 1 insertion(+)
 create mode 100644 main.py 
8.查看刚才的commit记录
[root@lb02 mysite]# git log
commit 78a2ecbd62752842dfbac8e6becf06dede7bd32e
Author: dh <437196165@qq.com>
Date:   Sat Feb 27 17:02:39 2021 +0800

     echo main.py
7.总结如上几步,就是基本的一种,git管理文件的流程,且提交到本地仓库,第一个版本
git init mysite                          初始化git仓库
git status                                 查看git状态
echo 'print("挣了一个亿")' > main.py        新建一个代码文件,此时是未被git跟踪的
git status                                查看状态
    On branch master
    No commits yet
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        main.py
    nothing added to commit but untracked files present (use "git add" to track)
git add main.py  开始跟踪main.py文件
git status   此时再看已经被跟踪,现在已是可以被提交的状态,此时处于暂存区
git commit -m "echo main.py"  告诉git,把暂存区的main.py提交到本地仓库
git log     查看刚才的commit记录


检查git文件状态

git status 
此命令查看git工作目录的文件,处于生命周期的哪一个状态 注意,只能在git工作目录中输入这个命令,他会去找.git文件夹 
第一次输入git status会看到此状态,没有任何东西需要提交
[root@pyyuc ~/git_learning/mysite 12:00:34]#git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

说明当前工作目录很干净,所有的已跟踪文件,已经被提交且未更改。
此时处在master默认分支。
给文件重命名

git版本库中操作

修改main.py为mymain.py

[root@lb02 mysite]# mv main.py mymain.py

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3gWJBPhM-1614495387385)(file:///C:/Users/DIAHAO~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)]

查看状态

git status直接mv的操作,会被git记录为两个形容,一、删除原有文件、二、新建了mymain.py文件此时新文件还未被跟踪,需要git add , git commit原本的main.py还需要从暂存区删除。这样的步骤很麻烦,keyi 直接git mv命令即可,方才mv记录,可以通过git log查看历史记录,已经提交的id可以通过gir reset回退历史版本,回退到改名之前

文件改名最正确的姿势

[root@lb02 mysite]# git mv main.py mymain.py
[root@lb02 mysite]# git commit -m "mv mymain.py"

Git版本历史git log

在我们使用git的时候,会对代码文件不停的修改,不断地提交代码仓库。

当代码写好了一部分功能,就可以保存一个文档,这个存档操作就是git commit,如果代码出错,可以随时回到”存档”记录。Chakan commit调教记录地目录,git log

Git log 目录显示,从最新地commit记录到最远地记录顺序。

git log --oneline    一行显示git记录
git log --oneline  --all  一行显示所有分支git记录
git log --oneline --all -4 --graph 显示所有分支的版本演进的最近4条
git log -4  显示最近4条记录
git log --all     显示所有分支的commit信息
git branch -v 查看分支信息
git help --web log 以web界面显示log的参数

节git仓库文件管理生命周期

Git****仓库文件管理生命周期

Git****的四个区域:本地文件夹、暂存区、本地仓库、远程仓库

本地文件夹未初始化,git是不认识的。本地文件git init后就成了git仓库

在工作文件夹的每一个文件,只要两种状态,一个是未跟踪,一个是已跟踪。已跟踪的指的是已经被纳入git版本git管理的文件,在git快照中有他的记录

未跟踪的是这个文件不在git快照中,也不暂存区

git init初始化的工作文件夹,都是属于已跟踪了,后续的百年祭操作都会标记为,已修改文件,因此需要将修改后的文件,加入暂存区,然后提交暂存区的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XATFdMdo-1614495387387)(file:///C:/Users/DIAHAO~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

1未跟踪,进入暂存区
git add .
2.进行版本库提交,将暂存区的内容,写入到本地仓库
 git commit -m "提交注释"
3.此时文件被修改了,从unmodified状态变更为modified已经修改的状态
echo "巴啦啦能量" > balala.sh
4.再次提交这个被修改的文件,进入暂存区
  git add file
5.再次的提交版本
  git commit -m "修改了文件"
6.从本地仓库中,删除对某个文件的跟踪
  git rm --cached 文件名         #将文件,回到未跟踪的状态,就可以git add进行跟踪
7.此时对上述的删除动作,可以有三个选择 ##注意1和2的操作进行互选
 1.直接删除这个文件,不要了
 rm -rf 文件名
 2.撤销刚才的git rm 动作。就和什么事没发生一样
 git reset HEAD 文件名
git add 文件名 #再次进入跟踪状态,然后git commit -m "提交动作"

Git版本回退

我们已知git commit可以提交代码到本地仓库,如同虚拟主机的快照,也可以进行版本回退

git log可以查看历史版本记录
git reset --hard命令可以回退版本
git reset --hard HEAD^ 回退到上个版本
HEAD表示当前版版本
HEAD^表示上个版本
HEAD^^上上个版本
也可以直接git reset --hard 版本id号
这个时候就发现,git commit -m 所标记的注释信息非常重要了吧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UJdDIBAl-1614495387390)(file:///C:/Users/DIAHAO~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

git查看git版本变动日志

git穿梭未来
其实还是基于git log的恢复,如快照的恢复了。当你发现你git reset回退版本选错了了ID

可以git reflog 帮你记录了每一次执行的命令
[root@lb02 mysite]# git reflog
f4263c3 HEAD@{0}: reset: moving to f4263c3
13cf8af HEAD@{1}: commit: vim balala.sh
f4263c3 HEAD@{2}: commit: touch balala.sh
78a2ecb HEAD@{3}: reset: moving to 78a2ecbd62752842dfbac8e6becf06dede7bd32e
03bf753 HEAD@{4}: commit: mv mymain.py
78a2ecb HEAD@{5}: reset: moving to 78a2ecbd62752842dfbac8e6becf06dede7bd32e
0ab70a9 HEAD@{6}: commit: mv mymain.py
7706dce HEAD@{7}: commit: 修改了main.py文件名
5c56f2a HEAD@{8}: commit: 修改了main.py文件名
78a2ecb HEAD@{9}: commit (initial): echo main.py

回到某一个点。可以再次使用git reset -- hard  版本id
[root@lb02 mysite]# git reset --hard f4263c3
HEAD is now at f4263c3 touch balala.sh

git stash实践

保存当前暂存区和工作的改动cunc 起来,执行完毕git stash 再次运行git status 就会还想当前已是个干净的工作区,通过git stash list查看结果

命令整理
git stash          #保存暂存区,工作区进度
git stash list       #查看stash保存的列表以及id
git stash pop     #恢复最新的stash进度到工作区
git stash pop stash_id      #恢复指定的stash进度
git stash clear        #清空所有存储的stash进度
git stash drop stash_id    #删除一个存储的stash进度

git stash****实际用法

git stash会把所有未提交的修改(已经git add 还为git commit)都保存起来,用于以后续恢复当前工作目录,比如下面中间状态,通过git stash命令推送一个新的储藏,当前的工作目录就干净了

1.初始化生成一个新的git仓库
     [root@lb02 tmp]# git init test_git
#在改目录,进行一次版本提交
    [root@lb02 tmp# cd test_git/
    [root@lb02 test_git]# touch git.txt
    [root@lb02 test_git]# git add git.txt
    [root@lb02 test_git]# git commit -m "第一次提交"
2.再次写入新的内容,然后提交搭配暂存区,并且放入stash临时空间
    [root@lb02 test_git]# echo "学好Linux找个好工作" > stash.git.txt
    [root@lb02 test_git]# git add stash.git.txt
3.使用stash可以把暂存区还未提交的内容,临时存储起来
    [root@lb02 test_git]# git stash save "save stash.git.txt ing..."
4.此时该文件就会放入到stash临时空间了,通过stash文件内容,查看储藏室列表
    [root@lb02 test_git]# git stash list
    stash@{0}: On master: save stash.git.txt ing...
5.找回储藏室的文件内容加上后面的id号
    [root@lb02 test_git]# git stash pop stash@{0}

git分支命令
1.查看分支,查看当前分支情况,在哪一个就有*符
[yuchao@yumac ~/learn_git]$git branch
* master

此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。
当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。
如果我们要手动创建一个分支。执行 git branch (branchname) 即可。



2.创建分支
[yuchao@yumac ~/learn_git]$git branch onlyu
[yuchao@yumac ~/learn_git]$git branch
* master
  onlyu

现在我们可以看到,有了一个新分支 onlyu。
接下来我们将演示如何切换分支,我们用 git checkout (branch) 切换到我们要修改的分支。  


3.git分支练习
[yuchao@yumac ~/learn_git]$echo "超哥带你学git分支" > branch.txt
[yuchao@yumac ~/learn_git]$git add .
[yuchao@yumac ~/learn_git]$git commit -m "add branch.txt"
[master 91618a9] add branch.txt
 1 file changed, 1 insertion(+)
 create mode 100644 branch.txt
[yuchao@yumac ~/learn_git]$
[yuchao@yumac ~/learn_git]$
[yuchao@yumac ~/learn_git]$
[yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt

# 此时切换分支,Git会还原工作区的内容,到创建分支时的状态
[yuchao@yumac ~/learn_git]$git checkout onlyu
Switched to branch 'onlyu'
[yuchao@yumac ~/learn_git]$ls
learn.txt
# 切换回master,数据又回来了
[yuchao@yumac ~/learn_git]$git checkout master
Switched to branch 'master'
[yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt

4.我们也可以直接创建且切换分支
[yuchao@yumac ~/learn_git]$git checkout -b yuchao
Switched to a new branch 'yuchao'
[yuchao@yumac ~/learn_git]$git branch
  master
  onlyu
* yuchao
[yuchao@yumac ~/learn_git]$echo "我是分支yuchao,你好" >> yuchao.txt
[yuchao@yumac ~/learn_git]$git add .
[yuchao@yumac ~/learn_git]$git commit -m "add yuchao.txt"
[yuchao 1304234] add yuchao.txt
 1 file changed, 1 insertion(+)
 create mode 100644 yuchao.txt
[yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt    yuchao.txt

# 如缩减,当我们回退到主分支的时候,新创建的文件已然消失了
# 使用分支,实现了在不同的分支环境下工作,且可以来回切换
[yuchao@yumac ~/learn_git]$git checkout master
Switched to branch 'master'
[yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt

5.删除分支,删除分支后,随之分支管理的文件内容也被删了
[yuchao@yumac ~/learn_git]$git branch -d onlyu
Deleted branch onlyu (was e670d84).
[yuchao@yumac ~/learn_git]$git branch
* master
  yuchao


6.一旦分支有了独立的内容,你最终目的是,将分支独立开发的内容合并到主干分支。
# 主分支下内容
[yuchao@yumac ~/learn_git]$git branch
* master
  onlyu
  yuchao
[yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt

# yuchao分支下的内容
[yuchao@yumac ~/learn_git]$git checkout yuchao
Switched to branch 'yuchao'
[yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt    yuchao.txt


# 合并yuchao分支的文件内容到主干master
# 回退到master分支,然后执行命令
[yuchao@yumac ~/learn_git]$git checkout master
Switched to branch 'master'
[yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt
[yuchao@yumac ~/learn_git]$git merge yuchao
Updating 91618a9..1304234
Fast-forward
 yuchao.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 yuchao.txt
 # 此时发现已经在master主干分支,新增了一个文件
 [yuchao@yumac ~/learn_git]$ls
branch.txt    learn.txt    yuchao.txt

合并完之后,就可以删除该分支了,下次需要用分支开发,可以再次创建即可
[yuchao@yumac ~/learn_git]$git branch -d yuchao
Deleted branch yuchao (was 1304234).
git合并分支冲突

我们准备数据

1.准备开始进行开发了,新建一个分支
    [yuchao@yumac ~/learn_git]$git branch chaoge
    [yuchao@yumac ~/learn_git]$git checkout chaoge
    Switched to branch 'chaoge'
    [yuchao@yumac ~/learn_git]$ls
    branch.txt    learn.txt    yuchao.txt
    [yuchao@yumac ~/learn_git]$vim chaoge.php
    [yuchao@yumac ~/learn_git]$head -3 chaoge.php
    <?php
    echo "超哥带你学git合并冲突如何解决";
    ?>

2.将创建的文件内容,提交到chaoge分支
    [yuchao@yumac ~/learn_git]$git commit -m "add chaoge.php"
    [chaoge 3f6cccf] add chaoge.php
     1 file changed, 3 insertions(+)
     create mode 100644 chaoge.php

 3.此时我们切换回master分支,chaoge.php文件应该是不存在的
     [yuchao@yumac ~/learn_git]$git checkout master
    Switched to branch 'master'
    [yuchao@yumac ~/learn_git]$ls
    branch.txt    learn.txt    yuchao.txt

4.我们在master分支下,也创建名为chaoge.php的文件,且写入内容
    [yuchao@yumac ~/learn_git]$git checkout master
    [yuchao@yumac ~/learn_git]$head -3 chaoge.php
    <?php
    echo "我是冲突,嘿嘿嘿";
    ?>
# 提交到本地仓库
    [yuchao@yumac ~/learn_git]$git add .
    [yuchao@yumac ~/learn_git]$git commit -m "add chaoge.php  by master"
    [master 4d74537] add chaoge.php  by master
     1 file changed, 3 insertions(+)
     create mode 100644 chaoge.php

 5.此时你会发现,chaoge.php文件在master分支和chaoge分支,都有自己的代码内容,是不是?
 如果此时你合并分支,会发现如下问题
     [yuchao@yumac ~/learn_git]$git merge chaoge
    CONFLICT (add/add): Merge conflict in chaoge.php
    Auto-merging chaoge.php
    Automatic merge failed; fix conflicts and then commit the result.
发现了git给与的提示是,自动合并失败了,需要你自己手动解决冲突,然后提交结果

6.查看文件内容,文件被git自动修改了
第二行发生了文件内容冲突
master主分支上内容是 echo "我是冲突,嘿嘿嘿"
chaoge分支合并过来的内容是 echo "超哥带你学git合并冲突如何解决"
此时根据你自己的需求,决定如何修改代码文件,再次提交即可
    [yuchao@yumac ~/learn_git]$cat -n  chaoge.php
         1    <?php
         2    <<<<<<< HEAD
         3    echo "我是冲突,嘿嘿嘿";
         4    =======
         5    echo "超哥带你学git合并冲突如何解决";
         6    >>>>>>> chaoge
         7    ?>

7.自己决定对代码修改
    [yuchao@yumac ~/learn_git]$git diff
    diff --cc chaoge.php
    index b4689a3,ae89ca8..0000000
    --- a/chaoge.php
    +++ b/chaoge.php
    @@@ -1,3 -1,3 +1,7 @@@
      <?php
    ++<<<<<<< HEAD
     +echo "我是冲突,嘿嘿嘿";
    ++=======
    + echo "超哥带你学git合并冲突如何解决";
    ++>>>>>>> chaoge
      ?>

# 手动修改代码为确定版本,比如两个代码我都要保留
        [yuchao@yumac ~/learn_git]$cat chaoge.php
        <?php
        echo "我是冲突,嘿嘿嘿";
        echo "超哥带你学git合并冲突如何解决";
        ?>
#现在我们就解决了合并中的冲突,然后提交了结果
    [yuchao@yumac ~/learn_git]$git add .
    [yuchao@yumac ~/learn_git]$git status
    On branch master
    All conflicts fixed but you are still merging.
      (use "git commit" to conclude merge)

    Changes to be committed:
        modified:   chaoge.php

    [yuchao@yumac ~/learn_git]$git commit -m "merge chaoge with change chaoge.php"
    [master 4ba1c7d] merge chaoge with change chaoge.php


git标签

git****标签又什么用

git仓库的数据发生变化时我们经常会打上一个类似于软件版本的标签tag,这样通过标签可以把版本库中的某个版本个给记录下来,便于我们可以将数据便于取出来,标签就是版本库的一个快照

为啥用git标签

Git不是已经有commit了吗,可以附加提交信息,为什么还要tag呢?

开发下网:请把上周一发布的版本打包发布,commit_id是3a620d9ef5ffb8ccfbe85e764f857e0c9fdb7a46

运维小于:你这什么乱起八糟的数字…太难找了。请你换个方法

开发小王换了个方式:请把上周一发布的版本打包。版本号是v1.2按照tag v1.2查找commit记录就行了!

所以tag就是一个容易记住的名字,和某个commit记录绑定在一起

Git****标签使用实践

1.# 对当前最新的commit记录进行标签
[yuchao@yumac ~/learn_git]$git tag -a "v1.0" -m "修复了支付bug"

2.# 直接输入,则查看当前标签
[yuchao@yumac ~/learn_git]$git tag
v1.0

3.# 指定commitID创建标签,选中commit id 前7位就够了
git tag -a v1 1304234 -m "添加了yuchao.txt"

4.# 查看标签列表
[yuchao@yumac ~/learn_git]$git tag
v1
v1.0

5.# 查看标签里有什么git show
[yuchao@yumac ~/learn_git]$git show v1
tag v1
Tagger: yc <yc_uuu@163.com>
Date:   Tue Jul 7 15:26:15 2020 +0800

添加了yuchao.txt

commit 1304234d1240469587a7d448ba3f8e0c09f8a340 (tag: v1)
Author: yc <yc_uuu@163.com>
Date:   Tue Jul 7 11:37:20 2020 +0800

    add yuchao.txt

diff --git a/yuchao.txt b/yuchao.txt
new file mode 100644
index 0000000..9b91134
--- /dev/null
+++ b/yuchao.txt
@@ -0,0 +1 @@
+我是分支yuchao,你好

6.# 通过git log查看tag
# --graph:显示ASCII图形表示的分支合并历史
# —pretty=:使用其他格式显示历史提交信息
# -abbrev-commit:仅显示SHA-1的前几个字符,而非所有的40个字符 
[yuchao@yumac ~/learn_git]$git log --oneline --decorate --graph
*   4ba1c7d (HEAD -> master, tag: v1.0) merge chaoge with change chaoge.php
|\
| * 3f6cccf (chaoge) add chaoge.php
* | 4d74537 add chaoge.php  by master
|/
* 1304234 (tag: v1) add yuchao.txt
* 91618a9 add branch.txt
* e670d84 learn git diff end.
* eeef559 modify learn.txt
* 688c0ba second commit with modified learn.txt
* 81f0c64 my first commit with touch learn.txt

7.删除tag
[yuchao@yumac ~/learn_git]$git tag -d v1
Deleted tag 'v1' (was e2118b3)
[yuchao@yumac ~/learn_git]$git tag
v1.0
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值