标签与diff

Git标签

  • 新建标签,标签有两种:轻量级标签(lightweight)与带有附注标签(annotated)
  • 创建一个轻量级标签

    • git tag v1.0.0
  • 创建一个带有附注的标签

    • git tag -a v1.0.1 -m 'release version'
  • 删除标签

    • git tag -d tag_name

我们先创建一个轻量级标签:

A@DESKTOP-6DP8MG1 MINGW64 /e/Gitfile (test)
$ git tag v1.0.0

查看下git reflog:

a7ce3cd (HEAD -> test, tag: v1.0.0) HEAD@{0}: commit: finish the file
a5300dd HEAD@{1}: commit: apply stash
3573a23 HEAD@{2}: reset: moving to HEAD
3573a23 HEAD@{3}: reset: moving to HEAD
3573a23 HEAD@{4}: reset: moving to HEAD

发现没有任何多余的操作,只是增加了个指针,没有任何文件的移动

我们再试试带注释的:

A@DESKTOP-6DP8MG1 MINGW64 /e/Gitfile (test)
$ git tag -a v2.0.0 -m '2.0.0 released'

如果想查看你有哪些标签,则直接使用命令:git tag

A@DESKTOP-6DP8MG1 MINGW64 /e/Gitfile (test)
$ git tag
v1.0.0
v2.0.0

如果想在很多标签中查找某个标签,则可以加上这个标签的关键字并且在前面跟上-l参数,也可以跟上--list参数:

$ git tag -l "v2.0.0"
v2.0.0
$ git tag --list "v2.0.0"
v2.0.0

删除标签:增加-d参数

A@DESKTOP-6DP8MG1 MINGW64 /e/Gitfile (test)
$ git tag -d v1.0.0
Deleted tag 'v1.0.0' (was a7ce3cd)

A@DESKTOP-6DP8MG1 MINGW64 /e/Gitfile (test)
$ git tag
v2.0.0

然后我们切换到master,再次查看git tag:

A@DESKTOP-6DP8MG1 MINGW64 /e/Gitfile (test)
$ git checkout master
Switched to branch 'master'

A@DESKTOP-6DP8MG1 MINGW64 /e/Gitfile (master)
$ git tag
v2.0.0

可以发现在master中也能看到这个标签,可以说明标签不会随分支的改变而改变

git blame

这个命令在我们实际操作过程中,会经常用到,我们查看下它的文档:

git blame --help

git-blame - Show what revision and author last modified each line of a file

可以查看一个文件最近的修改是哪个人所做的,例:

$ git blame test1.txt
^61adf63 (YQHP-YuKi 2020-11-22 15:53:29 +0800 1) hello
9ed5c239 (YQHP-YuKi 2020-11-22 15:57:34 +0800 2) world
b38e36d4 (YQHP-YuKi 2020-11-22 15:58:38 +0800 3) hello world
3573a232 (YQHP-YuKi 2020-11-22 16:02:40 +0800 4) hello hello hello
69d720db (YQHP-YuKi 2020-12-01 19:17:47 +0800 5) stash in master

可以显示一个文件哪一行以及提交ID是由那一个人所做的

diff

git diff这个命令是我们在项目开发时候会经常使用到的命令,主要是对比两个文件的差异性,在了解git diff之前,我们先了解一下普通的diff

我们可以先查看一下自带的diff命令:

$ which diff
/usr/bin/diff

然后创建两个txt文件,分别是a.txtb.txt:

a.txt:

$ cat a.txt
hello git
hello a1
hello a2

b.txt:

$ cat b.txt
hello git
hello b1
hello b2

我们使用diff查看一下:

$ diff a.txt b.txt
2,3c2,3
< hello a1
< hello a2
---
> hello b1
> hello b2

显示出这种,表示a.txtb.txt的第二行与第三行不一样,a.txt的第二行与第三行是hello a1 hello a2,而b.txt的第二行与第三行是hello b1 hello b2,我们还可以在后面跟上参数-u:

$ diff -u a.txt b.txt
--- a.txt       2020-12-04 11:00:12.492672500 +0800
+++ b.txt       2020-12-04 11:00:36.444675600 +0800
@@ -1,3 +1,3 @@
 hello git
-hello a1
-hello a2
+hello b1
+hello b2

注:

  • a.txt文件对比b.txt文件,两个文件的创建时间
  • -1,-3第一个文件从第一行开始有3
  • +1,-3第二个文件从第一行开始有3
  • hello git这一行两个文件都是一样的,第一个文件删去-hello a1 -hello a2,加上+hello b1+ hello b2就成了第二个文件

git diff

git diff对比的是你分支中工作区文件与暂存区文件的区别,例:

我们先创建一个test.txt,在此之前记得git status查看状态,确保正常:

$ cat test.txt
hello world
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test.txt

这时候我们先执行git diff试试:

Administrator@bigdata037 MINGW64 /c/Gitfile (master)
$ git diff

因为我们此时的工作区与缓存区是没有任何差别的,所以diff检出不出任何差别,我们这时候再修改一下工作区的test.txt试试:

$ cat test.txt
hello BMC

我们再执行git diff试试:

Administrator@bigdata037 MINGW64 /c/Gitfile (master)
$ git diff
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory
diff --git a/test.txt b/test.txt
index 3b18e51..000048a 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-hello world
+hello BMC

注:

  • 因为两个文件都同名,所以git用了a/test.txtb/test.txt做比较
  • 其中以暂存区的a/test.txt作为源文件,工作区的b/test.txt作为目标文件
  • 暂存区删除hello world增加hello BMC就成了工作区的test.txt

我们对test.txt进行提交,查看一下状态:

$ git status
On branch master
nothing to commit, working tree clean

我们再修改test.txt:

$ cat test.txt
hello world
hello Java

如果我们想对比工作区与版本库中的文件,可以使用git diff,后面跟commit_id,如果想对比当前最新的一次版本库文件,则可以直接在后面跟HEAD例:

$ git diff HEAD
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory
diff --git a/test.txt b/test.txt
index 000048a..5c2892a 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
-hello BMC
+hello world
+hello Java

git diff --cached

比较的是版本库最新的提交与暂存区之间的差别

例:

最先的test1.txt:

$ cat test1.txt
hello
world
hello world
hello hello hello
stash in master

现在修改的test1.txt:

$ cat test1.txt
hello
world
hello world

对现在的test1.txt进行git add到缓存区:

$ git add test1.txt

执行git diff --cached:

$ git diff --cached
diff --git a/test1.txt b/test1.txt
index 4783573..a08736b 100644
--- a/test1.txt
+++ b/test1.txt
@@ -1,5 +1,3 @@
 hello
 world
 hello world
-hello hello hello
-stash in master

跟原来一样的注释

最后修改:2023 年 05 月 10 日
如果觉得我的文章对你有用,请随意赞赏