展开

文章目录

修改历史

历史修改版本

  1. 2021-06-07 16:20:34
  2. 2021-06-07 16:17:02

git不常用操作记录(2)

2021-06-07 16:14:57 Git 272

简介

作为一个程序员,肯定都是知道git这个版本控制工具的,尤其是gayhub平台,相信大家都不陌生。在日常工作生活中,我们使用的最多的git操作无非是clone、commit、push、pull等等。但是关于git的'奇技淫巧'还有很多,写篇博客记录一下!!!

.gitignore的使用

.gitignore大部分人都知道如何使用,在项目的根目录创建一个.gitigonre文件,可以在提交代码的时候将一个不需要提交的文件给忽略掉。

$ cat .gitignore
*.[oa]
*~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉 Git 忽略所有名字以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就为你的新仓库设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:
• 所有空行或者以 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
• 匹配模式可以以(/)开头防止递归。
• 匹配模式可以以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

看一个简单的栗子

# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf 

在最简单的情况下,一个仓库可能只根目录下有一个 .gitignore 文件,它递归地应用到整个仓库中。 然而,子目录下也可以有额外的 .gitignore 文件。子目录中的 .gitignore文件中的规则只作用于它所在的目录中。

github有一个十分详细的针对数十种语言及其项目的.gitignore文件配置,你可以在https://github.com/github/gitignore中找到。

git log查看提交历史

通过git log命令我们可以查看到当前仓库的所有提交历史记录,它会按照时间倒叙的方式将提交记录显示在屏幕上,如下图所示

git log sample

当我们在使用git log命令的时候,如果不加上参数的话默认会输出该仓库中所有的提交记录,如果我们需要查看详细的修改信息,我们可以通过-p 或者 -patch参数来获取

git log -p

commit 868f4bcb4d3290f4b5320f030fccdf1e7fc8ac8a (HEAD -> main, origin/main, origin/HEAD)
Merge: 1ee3c37f4 a25cba2c0
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Mon May 31 21:06:37 2021 +0100

    Merge pull request #5897 from tiennou/fix/coding-style-comment

commit a25cba2c0f4d85dc030c8fd65f5660acf00e9463
Author: Etienne Samson <samson.etienne@gmail.com>
Date:   Thu May 27 10:01:55 2021 +0200

    docs: fix incorrect comment marker

diff --git a/docs/coding-style.md b/docs/coding-style.md
index d5188f0bc..b8b94d69c 100644
--- a/docs/coding-style.md
+++ b/docs/coding-style.md
@@ -172,7 +172,7 @@ tags:
  *
  * @param s String to froznicate
  * @return A newly allocated string or `NULL` in case an error occurred.
- * /
+ */
 char *froznicate(const char *s);
 ```
 

commit 1ee3c37f48479e92f57c1a5da8c8393f4a745d13
Merge: 319ff3490 6b1f6e00b
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Wed May 19 09:31:30 2021 +0100

    Merge branch 'pr/5853'
# 省略后续部分

如果我们需要限制输出的行数我们可以在后面加上-number[1,2,3,4....]

git log -p -2

commit 868f4bcb4d3290f4b5320f030fccdf1e7fc8ac8a (HEAD -> main, origin/main, origin/HEAD)
Merge: 1ee3c37f4 a25cba2c0
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Mon May 31 21:06:37 2021 +0100

    Merge pull request #5897 from tiennou/fix/coding-style-comment

commit a25cba2c0f4d85dc030c8fd65f5660acf00e9463
Author: Etienne Samson <samson.etienne@gmail.com>
Date:   Thu May 27 10:01:55 2021 +0200

    docs: fix incorrect comment marker

diff --git a/docs/coding-style.md b/docs/coding-style.md
index d5188f0bc..b8b94d69c 100644
--- a/docs/coding-style.md
+++ b/docs/coding-style.md
@@ -172,7 +172,7 @@ tags:
  *
  * @param s String to froznicate
  * @return A newly allocated string or `NULL` in case an error occurred.
- * /
+ */
 char *froznicate(const char *s);
 ```

如果我们不想看详细的patch只需要显示初略的信息,我们可以通过--stat参数来获取初略提交信息

git log --stat

commit 868f4bcb4d3290f4b5320f030fccdf1e7fc8ac8a (HEAD -> main, origin/main, origin/HEAD)
Merge: 1ee3c37f4 a25cba2c0
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Mon May 31 21:06:37 2021 +0100

    Merge pull request #5897 from tiennou/fix/coding-style-comment

commit a25cba2c0f4d85dc030c8fd65f5660acf00e9463
Author: Etienne Samson <samson.etienne@gmail.com>
Date:   Thu May 27 10:01:55 2021 +0200

    docs: fix incorrect comment marker

 docs/coding-style.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 1ee3c37f48479e92f57c1a5da8c8393f4a745d13
Merge: 319ff3490 6b1f6e00b
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Wed May 19 09:31:30 2021 +0100

    Merge branch 'pr/5853'

commit 319ff349039dc73f5fe099f83f198fb65782414f
Merge: b5dcdad34 1b1e541dd
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Tue May 18 20:49:40 2021 +0100

    Merge pull request #5892 from libgit2/ethomson/memleak
    
    tests: clean up memory leak, fail on leak for win32

commit 6b1f6e00bf7c91b3b5230e20ecb57a7d9792cee7
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Tue May 18 12:21:15 2021 +0100

    diff: test ignore-blank-lines

 tests/diff/workdir.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)
# 省略后续部分

在git log还有一个比较有用的参数是--pretty,可以通过该参数来定制commit log的不同显示模式,例如online、short、full、fuller等。oneline就是将所有的提交记录显示在一行,其他的类似只是详细方式各不相同,最有用的是format参数,他可以定制commit log的显示格式,对应格式如下表所示

pretty

通过下面的命令来显示提交信息的简短hash值、提交作者、提交日期、提交log等

git log --pretty=format:"%h - %an, %ar: %s"

868f4bcb4 - Edward Thomson, 7 天前: Merge pull request #5897 from tiennou/fix/coding-style-comment
a25cba2c0 - Etienne Samson, 11 天前: docs: fix incorrect comment marker
1ee3c37f4 - Edward Thomson, 3 周前: Merge branch 'pr/5853'
319ff3490 - Edward Thomson, 3 周前: Merge pull request #5892 from libgit2/ethomson/memleak
6b1f6e00b - Edward Thomson, 3 周前: diff: test ignore-blank-lines
1b1e541dd - Edward Thomson, 3 周前: tests: clean up refs::races zero oid test
a6fb72a8b - Edward Thomson, 3 周前: tests: exit with error on win32 leakcheck
b5dcdad34 - Edward Thomson, 3 周前: Merge pull request #5852 from implausible/httpclient/skip-entire-body
3532c5f49 - Edward Thomson, 3 周前: Merge pull request #5850 from punkymaniac/comment-format
9ccb900d7 - Edward Thomson, 3 周前: Merge pull request #5831 from todaysoftware/bindings/libgit2-delphi
589443883 - Edward Thomson, 3 周前: Merge branch 'zero_oid_in_old'
cf323cb9d - Edward Thomson, 3 周前: refs: test git_reference_create_matching failure for zero oid
be95f684d - Edward Thomson, 4 周前: Merge pull request #5839 from staktrace/find_similar
# 省略后续内容

git log的参数如下图所示

git log参数

当前共有0条评论