git · 2019-08-18 0

git命令及使用

一、设置签名

设置系统级别的用户名和Email地址,会把用户名和Email地址存放在~/.gitconfig下

签名的作用是区分不同开发人员的身份,这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

二、创建版本库

进入一个目录,git init 命令就是把这个目录变成 git 可以管理的仓库,完成后,目录下会创建一个隐藏的 .git 目录

工作区:在电脑能看到的目录

版本库:.git是版本库

版本库中有暂存区和分支

git init

例如,把 /home/zxm/testgit 目录变成 git 仓库

zxm@zxm-pc:~/testgit$ git init
已初始化空的 Git 仓库于 /home/zxm/testgit/.git/
zxm@zxm-pc:~/testgit$ ls -a
.  ..  .git

三、提交

git add [<file_name>] 命令把工作区的文件添加到暂存区

git mv 移动文件,此操作或保留 git 历史

git commit -m <comment> 命令把暂存区的内容提交到当前分支($ git commit -m "add 3 files."  -m后面输入的是本次提交的说明)

git commit -am <comment> -a 参数设置修改文件后不需要执行 git add 命令,直接来提交

git commit -m "title" -m "description" 提交带 titile 和 description

git commit -m "title" -m "description" --author='zxm <zxm-2018@qq.com>' --date="2023-07-04T09:59:30" 提交信息并显式指定作者信息和时间

git commit --allow-empty -m "description" 提交带 titile 空提交

git commit --amend --message="this is message" --author="zxm <zxm-2018@qq.com>" 修改上次提交的信息

git commit --amend --message="this is message" 修改上次提交的信息,仅修改 message 信息

git commit --amend --author="zxm <zxm-2018@qq.com>" 修改上次提交的信息,修改 author 信息,输入 git commit --amend 之后,进入编辑模式,修改提交信息。如果要修改之前的 commit 需要使用 git rebase

git commit --amend --author="zxm <zxm-2018@qq.com>" --no-edit 修改上次作者信息,不修改 message 信息。如果要修改之前的 commit 需要使用 git rebase

git commit --amend --date="2023-07-04T09:59:30" 修改提交时间

git commit --amend --reset-author 重置用户信息,现在将该提交的作者改为我

git commit --allow-empty --amend 修改空提交

git rebase -i [<start_commit_id>] [<end_commit_id>] 可以压缩合并多次提交和修改多次提交, -i 的意思是 –interactive,即弹出交互式的界面让用户编辑完成合并操作,<start_commit_id> <end_commit_id> 则指定了一个编辑区间,如果不指定 <end_commit_id> ,则该区间的终点默认是当前分支 HEAD 所指向的 commit (该区间指定的是一个前开后闭的区间),列表中将开头的 pick 修改为 edit,表示修改提交,列表中将开头的 pick 修改为 squash,表示合并提交

1.提交

例如,在目录下创建文件 file1.txt、file2.txt、file3.txt,并分别加上内容 “This is file1”,“This is file2”,“This is file3”

zxm@zxm-pc:~/testgit$ ls -a
.  ..  file1.txt  file2.txt  file3.txt  .git
zxm@zxm-pc:~/testgit$ git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
    file1.txt
    file2.txt
    file3.txt

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
zxm@zxm-pc:~/testgit$ git add file1.txt
zxm@zxm-pc:~/testgit$ git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)
    新文件:   file1.txt

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
    file2.txt
    file3.txt

zxm@zxm-pc:~/testgit$ git add file2.txt file3.txt
zxm@zxm-pc:~/testgit$ git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)
    新文件:   file1.txt
    新文件:   file2.txt
    新文件:   file3.txt

zxm@zxm-pc:~/testgit$ git commit -m "add 3 files"
[master (根提交) 54ef9b1] add 3 files
 3 files changed, 3 insertions(+)
 create mode 100644 file1.txt
 create mode 100644 file2.txt
 create mode 100644 file3.txt
zxm@zxm-pc:~/testgit$ git status
位于分支 master
无文件要提交,干净的工作区

2.合并提交

合并提交:

一开始四条 commit 记录都被标记为 “pick”,意思是这四次提交都会被采用,并显示在 git 的提交记录中,将后三次 commit id 前面的 “pick” 改为 “s” ,只有第一次的 commit id 前面是 “pick”,保存后,会弹出修改 message 的界面

当然更好的方式是上图中后3条提交记录都从 “pick” 改成 “f”,会自动并入第一条提交记录中,保留第一次提交的 message,就不会多弹出一次框

zxm@zxm-pc:~/testgit$ git rebase -i HEAD~4

把 “pick” 改成 “s”

pick 00a2c2c add Test1
s 78bba16 add Test222
s 58fd4c4 add Test333
s a1c48f7 add Test4

# 变基 41cfdf7..a1c48f7 到 a1c48f7(4 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但修改提交说明
# e, edit <提交> = 使用提交,进入 shell 以便进行提交修补
# s, squash <提交> = 使用提交,但融合到前一个提交
# f, fixup <提交> = 类似于 "squash",但丢弃提交说明日志
# x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
# b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
# d, drop <提交> = 删除提交
# l, label <label> = 为当前 HEAD 打上标记
# t, reset <label> = 重置 HEAD 到该标记
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       创建一个合并提交,并使用原始的合并提交说明(如果没有指定
# .       原始提交,使用注释部分的 oneline 作为提交说明)。使用
# .       -c <提交> 可以编辑提交说明。
#
# 可以对这些行重新排序,将从上至下执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#
# 注意空提交已被注释掉

3.修改提交

3.1 修改最近一次提交

git commit --amend

参数:

  • --author <author> 提交时覆盖作者
  • --date <date> 提交时覆盖日期
  • -m, --message <message> 提交说明

修改最近一次提交的作者、作者日期、提交说明

git commit --amend --author="zxm <zxm-2018@qq.com>" --date="2025-01-22T09:00:00" --message "this is message"
git commit --amend --author="zxm <zxm-2018@qq.com>" --date="2025-01-22T09:00:00" --no-edit 

修改最近一次提交内容

1) 修改提交内容
2) git add .
3) git commit --amend

3.2 修改某次提交

修改某次提交的作者、作者日期、提交说明

1) git rebase -i <commit_sha>      此 commit_sha 为待修改日期的 commit 的前一个 commit 的 commit_sha
2) 在 vi 弹出交互信息中将待修改日期的 commit 前的 pick 修改为 e
3) 执行 `git commit --amend --author="zxm <zxm-2018@qq.com>" --date="2025-01-22T09:00:00" --message "this is message"`
4) 执行 `git rebase --continue` 转到下一个 commit
5) 重复此过程,直到修改所有提交。 通过 git status 可查看进展

修改某次提交内容

git rebase -i HEAD~4

把 “pick” 改成 “e”

pick dd6d7f1 add Test1
e 0ecf8b4 add Test2
e 3596661 add Test3
pick f218f42 add Test4
zxm@zxm-pc:~/testgit$ git rebase -i HEAD~4
停止在 0ecf8b4... add Test2
您现在可以修补这个提交,使用

  git commit --amend

当您对变更感到满意,执行

  git rebase --continue
zxm@zxm-pc:~/testgit$ git status
交互式变基操作正在进行中;至 41cfdf7
最后一条命令已完成(2 条命令被执行):
   pick dd6d7f1 add Test1
   e 0ecf8b4 add Test2
接下来要执行的命令(剩余 2 条命令):
   e 3596661 add Test3
   pick f218f42 add Test4
  (使用 "git rebase --edit-todo" 来查看和编辑)
您在执行将分支 'master' 变基到 '41cfdf7' 的操作时编辑提交。
  (使用 "git commit --amend" 修补当前提交)
  (当您对您的修改满意后执行 "git rebase --continue")

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
    .idea/

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
zxm@zxm-pc:~/testgit$ git commit --amend --author="zxm <zxm-2018@qq.com>"
[分离头指针 6d9b6e8] add Test22
 Author: zxm <zxm-2018@qq.com>
 Date: Tue Jul 4 11:08:37 2023 +0800
 1 file changed, 4 insertions(+)
 create mode 100644 src/main/java/com/example/Test2.java
zxm@zxm-pc:~/testgit$ git rebase --continue
停止在 3596661... add Test3
您现在可以修补这个提交,使用

  git commit --amend 

当您对变更感到满意,执行

  git rebase --continue
zxm@zxm-pc:~/testgit$ git commit --amend --author="zxm <zxm-2018@qq.com>"
[分离头指针 65aaf75] add Test33
 Author: zxm <zxm-2018@qq.com>
 Date: Tue Jul 4 11:08:43 2023 +0800
 1 file changed, 4 insertions(+)
 create mode 100644 src/main/java/com/example/Test3.java
zxm@zxm-pc:~/testgit$ git rebase --continue
Successfully rebased and updated refs/heads/master.

4.Fast-Forward Merge

Fast-Forward Merge (快进式合并)

由提交日志可以看出,master 分支从 c2 开始与 dev 分叉后就再也没有新的提交,所以 git 只是简单的把 master 的 head 指针前移动到 c4,合并就完成了。因为不涉及内容变更的比较,所以这种合并方式效率很高。

Fast-Forward Merge 要求参与合并的两个分支上的提交必须是“一脉相承”的父子或祖孙关系,不过有个缺点,作为被合并的dev分支,它提交的历史在合并以后会和master分支的提交历史重合。

如果向合并后保留来在被合并分支的提交历史,并显式标注出合并发生的位置,那就需要在执行合并时加上参数 --no-ff,这样的合并就不使用 Fast-Forward Merge。

zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
* a331d43 (dev) c4
* 80348d3 c3
* 824533d (HEAD -> master) c2
* 6f7b7a9 c1
* 359e0f4 (origin/master, origin/fix_bug, origin/HEAD, fix_bug) add ignore
zxm@zxm-pc:~/testgit$ git merge dev
更新 824533d..a331d43
Fast-forward
 src/main/java/com/example/Main.java | 1 +
 1 file changed, 1 insertion(+)
zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
* a331d43 (HEAD -> master, dev) c4
* 80348d3 c3
* 824533d c2
* 6f7b7a9 c1
* 359e0f4 (origin/master, origin/fix_bug, origin/HEAD, fix_bug) add ignore

5.Three-Way Merge

使用 git merge --no-ff --no-edit dev,则进行 Three-Way Merge。也可以 git merge --no-ff -m message dev 指定提交日志的 message

由提交日志可以看出,多个一个提交记录

zxm@zxm-pc:~/testgit$ git reset --hard 824533d
HEAD 现在位于 824533d c2
zxm@zxm-pc:~/testgit$ git reset --hard 824533d
HEAD 现在位于 824533d c2
zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
* a331d43 (dev) c4
* 80348d3 c3
* 824533d (HEAD -> master) c2
* 6f7b7a9 c1
* 359e0f4 (origin/master, origin/fix_bug, origin/HEAD, fix_bug) add ignore
zxm@zxm-pc:~/testgit$ git merge --no-ff --no-edit dev
Merge made by the 'recursive' strategy.
 src/main/java/com/example/Main.java | 1 +
 1 file changed, 1 insertion(+)
zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
*   d84b4e2 (HEAD -> master) Merge branch 'dev'
|
| * a331d43 (dev) c4
| * 80348d3 c3
|/
* 824533d c2
* 6f7b7a9 c1

如果参与合并的两个分支上的提交不是“一脉相承”的父子或祖孙关系,使用 git merge,则会是 Three-Way Merge

zxm@zxm-pc:~/testgit$ git reset --hard 824533d
HEAD 现在位于 824533d c2
zxm@zxm-pc:~/testgit$ vim src/main/java/com/example/Main.java 
zxm@zxm-pc:~/testgit$ git commit -am c5
[master 7d78102] c5
 1 file changed, 1 insertion(+), 1 deletion(-)
zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
* 7d78102 (HEAD -> master) c5
| * a331d43 (dev) c4
| * 80348d3 c3
|/
* 824533d c2
* 6f7b7a9 c1
zxm@zxm-pc:~/testgit$ git merge --no-edit dev 
自动合并 src/main/java/com/example/Main.java
Merge made by the 'recursive' strategy.
 src/main/java/com/example/Main.java | 1 +
 1 file changed, 1 insertion(+)
zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
*   207660c (HEAD -> master) Merge branch 'dev'
|
| * a331d43 (dev) c4
| * 80348d3 c3
* | 7d78102 c5
|/
* 824533d c2

6.Squash Merge

zxm@zxm-pc:~/testgit$ git reset --hard 7d78102
HEAD 现在位于 7d78102 c5
zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
* 7d78102 (HEAD -> master) c5
| * a331d43 (dev) c4
| * 80348d3 c3
|/
* 824533d c2
* 6f7b7a9 c1
zxm@zxm-pc:~/testgit$ git merge --squash dev
自动合并 src/main/java/com/example/Main.java
挤压提交 -- 未更新 HEAD
自动合并进展顺利,按要求在提交前停止
zxm@zxm-pc:~/testgit$ git status
位于分支 master
您的分支领先 'origin/master' 共 3 个提交。
  (使用 "git push" 来发布您的本地提交)

要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
        修改:     src/main/java/com/example/Main.java
zxm@zxm-pc:~/testgit$ git commit -m c6
[master 8a8910d] c6
 1 file changed, 1 insertion(+)
zxm@zxm-pc:~/testgit$ git log --oneline -5 --graph --all
* 8a8910d (HEAD -> master) c6
* 7d78102 c5
| * a331d43 (dev) c4
| * 80348d3 c3
|/
* 824533d c2

四、查看仓库状态

git status 命令查看仓库当前的状态

git diff [<commit_id>] [<commit_id>] [--stat] [<file_name>] 命令可以看到具体修改了什么内容

例如,向file1.txt追加内容“append something”,使用git diff命令,红色的表示删除的内容,绿色表示增加的内容

zxm@zxm-pc:~/testgit$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
    修改:     file1.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
zxm@zxm-pc:~/testgit$ git diff file1.txt
diff --git a/file1.txt b/file1.txt
index c278a75..3b7b735 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1,2 @@
 This is file1
+append something

五、查看提交日志

  • git log 命令显示详细的提交日志

  • git log -n 5 显示前5条,提交日志

  • git log --graph 显示点先图

  • git log --graph --all 显示所有分支的日志

  • git log --pretty=full 展示作者和提交者,作者和提交者是两个信息

  • git log --pretty=onelinegit log --oneline 一行一个提交

  • git log --pretty=oneline --abbrev-commit 一行一个提交,并缩写版本id

  • git log --author=zxm 仅显示作者匹配指定字符串的提交

  • git log --committer=zxm 仅显示提交者匹配指定字符串的提交

  • git reflog 查看提交记录(可以看到被删除版本的id)

  • git diff [<commit_id>] [<commit_id>] [<--stat>] [<file_name>] 查看某个版本提交了哪些文件

zxm@zxm-pc:~/testgit$ git log
commit 2ece07424189f7e7a0da49945517cf0415841c77 (HEAD -> master)
Author: zxm <zxm-2018@qq.com>
Date:   Sun Aug 18 15:28:50 2019 +0800

    append something

commit 54ef9b1ad2dd0d5d672db76535f0a874b9078e15
Author: zxm <zxm-2018@qq.com>
Date:   Sun Aug 18 14:55:48 2019 +0800

    add 3 files
zxm@zxm-pc:~/testgit$ git reflog
2ece074 (HEAD -> master) HEAD@{0}: commit: append something
54ef9b1 HEAD@{1}: commit (initial): add 3 files

六、回退

  • git reset --hard <commit_id> 回退到指定版本(可以结合git reflog看到被删除版本的id,回到未来)

  • git reset --hard HEAD^ 回退到上一个版本(HEAD^^回退到上上个版本 HEAD~100回退到往上100个版本)

  • git reset --soft HEAD^ 回退到上一个版本,修改的内容回退到暂存区

  • git reset HEAD^ 撤销最近一次提交(即退回到上一次版本)并本地保留代码

zxm@zxm-pc:~/testgit$ git log --pretty=oneline
2ece07424189f7e7a0da49945517cf0415841c77 (HEAD -> master) append something
54ef9b1ad2dd0d5d672db76535f0a874b9078e15 add 3 files
zxm@zxm-pc:~/testgit$ git reset --hard HEAD^
HEAD 现在位于 54ef9b1 add 3 files
zxm@zxm-pc:~/testgit$ git log --pretty=oneline
54ef9b1ad2dd0d5d672db76535f0a874b9078e15 (HEAD -> master) add 3 files

git revert 删除撤销某次commit,此次操作会作为一次新的commit 提交,同时不会影响之前的commit记录

  • git revert HEAD 撤销前一次 commit

  • git revert HEAD^ 撤销前前一次 commit

  • git revert <commit_id> 撤销指定的版本

  • git revert --no-commit <commit_id> 撤销指定的版本,不自动提交

git revert 是用一次新的 commit 来回滚之前的 commit,git reset 是直接删除指定的 commit

七、撤销修改

  • git checkout <commit_id> <file_name> 把一个文件恢复到某个版本

  • git checkout -- <file_name> 把工作区的修改撤销

  • git reset HEAD <file_name> 把暂存区的修改退到工作区

八、分支操作

  • git branch 查看分支

  • git branch -v 查看分支,并显示最后的提交

  • git branch -vv 查看当前的本地分支与远程分支的关联关系

  • git branch -r 查看远程分支

  • git branch -a 查看分支本地分支和远程分支

  • git branch fix 创建fix分支,但不切换分支

  • git checkout fix 切换到fix分支

  • git checkout -b fix 创建并切换到fix分支

  • git branch -m old_name new_name 修改分支名称

  • git checkout --track <origin/branch_name> 远程新建了一个分支,本地没有该分支,--track 这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。

  • git checkout -b <branch_name> <origin/branch_name> 将创建branch_name并跟踪origin/branch_name

  • git merge fix 把fix分支合并到当前分支(如果把fix分支合并到master分支,需要先切换到master分支,在master上进行合并)

  • git branch -d fix 删除fix分支

  • git reset --hard origin/master 本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件)

  • git branch --merged 查看哪些分支已经合并到当前分支

  • git branch --no-merged 查看所有未合并工作的分支

  • git branch -u origin/remote_branch 当前所在本地分支关联远程 remote_branch 分支

  • git branch -u origin/remote_branch local_branch 本地分支 local_branch 关联远程 remote_branch 分支

九、储藏

git stash 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。

stash是本地的,不会通过git push命令上传到git server上

  • git stash stash当前修改

  • git stash save <message> stash当前修改,并加message

  • git stash list 查看现有stash

  • git stash apply <stash> 应用 stash

  • git stash apply stash@{0} 应用 stash@{0}

  • git stash pop 将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下

  • git stash drop <stash> 移除stash

  • git stash drop stash@{0} 移除 stash@{0}

  • git stash clear 删除所有的stash

十、git-cherry

git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支;git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。

  • git cherry-pick <commit_hash> 将指定的提交commit_hash,应用于当前分支

  • git cherry-pick <branch_name> 将 branch_name 分支的最近一次提交,转移到当前分支

  • git cherry-pick <commit_hash_a> <commit_hash_b> a 和 b 两个提交应用到当前分支

  • git cherry-pick <commit_hash_a>..<commit_hash_b> 转移从 a 到 b 的所有提交,不包含 a。它们必须按照正确的顺序放置:提交a 必须早于提交 b,否则命令将失败,但不会报错

  • git cherry-pick <commit_hash_a>^..<commit_hash_b> 转移从 a 到 b 的所有提交,包含 a

十一、查找

查看commitid属于哪个分支

git branch --contains <commit_id> --allgit branch -a --contains <commit_id>

zxm@zxm-pc:~/git-test$ git log --oneline
26d8b67 (HEAD -> dev) add c.txt
f8116f6 (prod, master) update a.txt
f2b1307 init
zxm@zxm-pc:~/git-test$ git branch --contains f8116f6 --all
* dev
  master
  prod
  test
zxm@zxm-pc:~/git-test$ git branch --contains 26d8b67 --all
* dev

十二、远程仓库

  • ssh-keygen -t rsa -C "email@example.com" 生成SSH Key,可以在用户主目录里找到.ssh目录,有id_rsa和id_rsa.pub

  • git remote add origin git@github.com:LuckZZ/testgit.git  添加远程仓库,origin表示仓库的别名(github上LuckZZ账号的test.git仓库)

  • git push -u origin master 把本地仓库内容推送到远程仓库origin的master分支上,如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push

  • git push origin --delete master 删除远程仓库origin的master分支

  • git push origin dev:dev 创建远程分支

  • git clone git@github.com:LuckZZ/testgit.git 从远程库克隆到本地(完整的把远程库下载到本地;创建origin远程地址别名;初始化本地库)

  • git pull origin master 把远程仓库master分支拉取到本地仓库,并且合并

  • git fetch origin 拉取分支,可以获取远程仓库的最新变更,并保存在本地的远程分支中,但不会自动合并到本地分支,远程被删除的分支不会同步删除本地origin的分支(origin/xxxx)

  • git remote update 更新本地仓库中的所有远程分支和标签

  • git fetch origin master 把远程仓库master分支拉取到本地仓库的origin/master分支,并没有合并master分支

  • git remote -v 查看远程仓库分支

  • git remote rm origin 删除本地关联的远程origin

  • git branch --set-upstream-to=origin/<branch_name> <branch_name> 本地分支关联远程分支

  • git ls-remote --heads <repo_url> 查看远程仓库所有分支

  • git ls-remote -h <repo_url> 查看远程仓库所有分支

例如,

id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可把公钥添加到github上(表示本机的git可以不需要github账号和密码连接github仓库)

ssh key

在github上创建名为testgit的仓库,在执行git remote add origin git@github.com:LuckZZ/testgit.git ,git push -u origin master,把本地仓库内容推送到github上testgit仓库

git remote

十三、标签管理

  • git tag v1.0 在当前分支最新的提交上,打上标签v1.0

  • git tag v0.9 bde1e 为提交id为bde1e...的提交,打上标签v0.9(git tag -a v0.9 -m "version 0.9 released" bde13 -m为标签说明)

  • git tag -a v0.8 -m "message" 打上标签,并加上标签备注

  • git tag 查看所有标签

  • git ls-remote --tags 查看远程库的标签

  • git show v0.9 查看名为v0.9的标签信息

  • git tag -d v0.9 删除标签v0.9

  • git push origin v1.0 标签推送到远程库(git tag创建的标签都只存储在本地)

  • git push origin --tags 所有的标签推送到远程库

  • git push --delete origin v0.9 删除远程库标签v0.9

例如,查看所有标签

zxm@zxm-pc:~/testgit$ git tag
v0.9
v1.0

git push origin

十四、gitignore文件

对于不需要追踪(track)的文件,可以使用".gitignore"文件,进行忽略

1.语法规范

  • 空行或是以#开头的行即注释行将被忽略
  • 以斜杠 “/” 结尾表示目录
  • 以星号 “*” 通配多个字符
  • 以问号 “?” 通配单个字符
  • 以方括号 “[]” 包含单个字符的匹配列表
  • 以叹号 “!” 表示不忽略(跟踪)匹配到的文件或目录
  • 可以在前面添加斜杠 “/” 来避免递归

2.栗子

  • 忽略 .txt 文件 ---- *.txt

  • 但否定忽略 hello.txt, 尽管已经在前面忽略了 .txt 文件 ---- !hello.txt

  • 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO ---- /TODO

  • 忽略 build/ 文件夹下的所有文件 ---- build/

  • 忽略 doc/notes.png, 不包括 doc/server/arch.png ---- doc/*.png

  • 忽略所有的 .pdf 文件 在 doc/ 下的 ---- doc/*/.pdf

3..gitignore文件

# maven ignore
target/

# eclipse ignore
.settings/
.project
.classpath

# idea ignore
.idea/
*.iml
# temp ignore
*.log
*.cache
*.tmp