一、设置签名
设置系统级别的用户名和Email地址,会把用户名和Email地址存放在~/.gitconfig下
签名的作用是区分不同开发人员的身份,这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
二、创建版本库
进入一个目录,git init
命令就是把这个目录变成 git 可以管理的仓库,完成后,目录下会创建一个隐藏的 .git
目录
工作区:在电脑能看到的目录
版本库:.git是版本库
版本库中有暂存区和分支
例如,把 /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=oneline
或git 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> --all
或 git 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仓库)
在github上创建名为testgit的仓库,在执行git remote add origin git@github.com:LuckZZ/testgit.git ,git push -u origin master,把本地仓库内容推送到github上testgit仓库
十三、标签管理
-
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
十四、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