基本命令:
- git --help 显示帮助
$ git --help
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--super-prefix=<path>] [--config-env=<name>=<envvar>]
<command> [<args>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
restore Restore working tree files
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
diff Show changes between commits, commit and working tree, etc
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
commit Record changes to the repository
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
reset Reset current HEAD to the specified state
switch Switch branches
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.
在git中,我们使用git config 命令用来配置git的配置文件,git配置级别主要有以下3类:
1、仓库级别 local 【优先级最高】
2、用户级别 global【优先级次之】
3、系统级别 system【优先级最低】
配置与查看:
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning
$ git config --global user.email yunweixiaocai@csdn.com
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning
$ git config --global user.name yunweixiaocai
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning
$ git config --global -l
user.name=yunweixiaocai
user.email=yunweixiaocai@csdn.com
# 重置信息
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning
$ git config --unset --global user.name
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning
$ git config --global -l
user.email=yunweixiaocai@csdn.com
# 设置命令别名
96133@LAPTOP-E2F5BG63 MINGW64 ~/Desktop
$ git config --global alias.cout checkout
- 生成秘钥
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning
$ ssh-keygen -t rsa -C yunweixiaocai@csdn.com
……
Your identification has been saved in /c/Users/96133/.ssh/id_rsa
Your public key has been saved in /c/Users/96133/.ssh/id_rsa.pub
……
将/c/Users/96133/.ssh/id_rsa.pub的内容添加至你项目所在的github平台,如:https://gitee.com/profile/sshkeys
- git init
初始化本地目录,使之可以使用版本控制功能
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning
$ cd localdir/
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ git init
Initialized empty Git repository in D:/gitlearning/localdir/.git/
- git status / git add / git commit
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ touch bbb.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git add .
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: bbb.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git commit -m "commit reason:add a file-bbb
> comitter: yunweixioacai"
[master (root-commit) 4dcf0d9] commit reason:add a file-bbb comitter: yunweixioacai
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bbb.txt
git diff 不加任何参数的时候比较的是工作区和暂存区之间的区别,而git add是将工作区的文件提交至暂存区
所以首先修改两行内容,一定要在git add之前执行git diff才能看到区别:
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git diff
warning: LF will be replaced by CRLF in bbb.txt.
The file will have its original line endings in your working directory
diff --git a/bbb.txt b/bbb.txt
index c6b99ff..236c9e6 100644
--- a/bbb.txt
+++ b/bbb.txt
@@ -1,7 +1,7 @@
add a line
-add a line
-add a line
+add two lines
+add two lines
add a line
add a line
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git add .
warning: LF will be replaced by CRLF in bbb.txt.
The file will have its original line endings in your working directory
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git diff
–staged 比较暂存区与本地库之间的区别,也就是上一次commit之后至今已暂存(add)未commit的内容
/d/gitlearning/localdir (master)
$ git add .
warning: LF will be replaced by CRLF in bbb.txt.
The file will have its original line endings in your working directory
/d/gitlearning/localdir (master)
$ git diff
/d/gitlearning/localdir (master)
$ git diff --staged
diff --git a/bbb.txt b/bbb.txt
index c6b99ff..236c9e6 100644
--- a/bbb.txt
+++ b/bbb.txt
@@ -1,7 +1,7 @@
add a line
-add a line
-add a line
+add two lines
+add two lines
add a line
add a line
- git mv 移动或重命名
mv之后可直接commit,无需add
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git mv ccc.txt ddd.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: ccc.txt -> ddd.txt
- git rm
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git rm ddd.txt
rm 'ddd.txt'
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: ddd.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git commit -m "ddd" ddd.txt
[master 7de7866] ddd
1 file changed, 2 deletions(-)
delete mode 100644 ddd.txt
- git chekout --commit之前恢复所有修改(恢复至上一次提交的状态)
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ vi ddd.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git checkout HEAD -- ddd.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git status
On branch master
nothing to commit, working tree clean
# 恢复到最近一次提交的上一次提交,^^代表最近一次提交的上两次提交
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git checkout HEAD^ -- ddd.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ cat ddd.txt
rrrrr
ttttt
- git revert id 恢复提交
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git revert e2c69b3
[master ab311f4] Revert "modified one line"
1 file changed, 1 insertion(+), 1 deletion(-)
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log --oneline
ab311f4 (HEAD -> master) Revert "modified one line"
0bb08c0 add aaa.ttt
e2c69b3 modified one line
e6bdb10 delete one line
5b443fe clean
e53c101 add
7de7866 ddd
7609339 nn
2996cb5 mv
e06fb8d add dd
61a7e40 mv
三种模式:
git reset [filename] --hard commitID :硬重置,工作区与暂存区的修改被删除,恢复到与commitID 时的状态完全一致
git reset [filename] [–mixed] commitID:保留工作目录,并清空暂存区
git reset [filename] --soft commitID 会保留工作区的内容,并把因为保留工作区内容所带来的新的文件差异放进暂存区。
- git branch
查看分支、创建分支、切换分支、修改分支名称、删除分支
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git branch
* master
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git branch newbranch
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git branch
* master
newbranch
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git checkout newbranch
Switched to branch 'newbranch'
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git branch -m newbranch newbranch-1
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git branch
* master
newbranch-1
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git branch -d newbranch-1
Deleted branch newbranch-1 (was 3a1b794).
- git merge
在newbranch与master上分别修改不同的文件并commit后:
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log --oneline --all --decorate
4ef579b (HEAD -> master) modify bbb on master
a09eee6 (newbranch) modify on newbranch
3a1b794 all
4dcf0d9 commit reason:add a file-bbb comitter: yunweixioacai
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git merge newbranch
Merge made by the 'ort' strategy.
aaa.txt | 1 +
1 file changed, 1 insertion(+)
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log --oneline --all --decorate
6dbf89c (HEAD -> master) Merge branch 'newbranch'
4ef579b modify bbb on master
a09eee6 (newbranch) modify on newbranch
3a1b794 all
4dcf0d9 commit reason:add a file-bbb comitter: yunweixioacai
处理冲突:
当在不同分支修改相同文件并commit后merge时可能会出现冲突:
$ git log --decorate --all --oneline
673df32 (HEAD -> master) master
8d0aefb (newbranch) sddfds
6dbf89c Merge branch 'newbranch'
4ef579b modify bbb on master
a09eee6 modify on newbranch
3a1b794 all
4dcf0d9 commit reason:add a file-bbb comitter: yunweixioacai
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git merge newbranch
Auto-merging aaa.txt
CONFLICT (content): Merge conflict in aaa.txt
Automatic merge failed; fix conflicts and then commit the result.
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master|MERGING) # 注意这里的merging
此时若要放弃合并:
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master|MERGING)
$ git merge --abort
若要解决冲突,则要修改后commit:
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master|MERGING)
$ vi aaa.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master|MERGING)
$ git add .
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master|MERGING)
$ git commit
[master 6c62b6a] Merge branch 'newbranch'
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log --oneline --de
--decorate --decorate= --dense
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log --oneline --de
--decorate --decorate= --dense
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log --oneline --decorate --all
6c62b6a (HEAD -> master) Merge branch 'newbranch'
673df32 master
8d0aefb (newbranch) sddfds
6dbf89c Merge branch 'newbranch'
4ef579b modify bbb on master
a09eee6 modify on newbranch
3a1b794 all
4dcf0d9 commit reason:add a file-bbb comitter: yunweixioacai
15.git stash
保存工作区的修改并恢复至修改之前的状态
# 修改文件
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ vi aaa.txt
# 执行stash
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git stash save aaa.txt "add one line on aaa.txt"
Saved working directory and index state On master: aaa.txt add one line on aaa.txt
#查看状态是clean状态
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git status
On branch master
nothing to commit, working tree clean
# 查看git stash保存内容列表
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git stash list
stash@{0}: On master: aaa.txt add one line on aaa.txt
# 查看保存的修改
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git stash show -p stash@{0}
diff --git a/aaa.txt b/aaa.txt
index bb574c6..0b2ccac 100644
--- a/aaa.txt
+++ b/aaa.txt
@@ -1,2 +1,4 @@
popopoddsfd·
ddddggghhhmaster
+git stash
+t stass:wq
# 恢复保存的修改至工作区
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git stash list
stash@{0}: On master: aaa.txt add one line on aaa.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git stash apply stash@{0}
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: aaa.txt
no changes added to commit (use "git add" and/or "git commit -a")
#删除保存的stash
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git stash drop stash@{1}
Dropped stash@{1} (ff439665242c07c5a89892d510c5bb7ffbe3e837)
- git log
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log
commit 6c62b6af8738806bf3d4bc1a9403359fbde5534b (HEAD -> master)
Merge: 673df32 8d0aefb
Author: yunweixiaocai <yunweixiaocai@csdn.com>
Date: Sun Nov 21 20:33:42 2021 +0800
Merge branch 'newbranch'
commit 673df3202641b4728ccdac029be6433b0db6352d
Author: yunweixiaocai <yunweixiaocai@csdn.com>
Date: Sun Nov 21 20:29:02 2021 +0800
master
commit 8d0aefb41f58341d9c3b0062ec319a61c8d153fb (newbranch-1)
Author: yunweixiaocai <yunweixiaocai@csdn.com>
Date: Sun Nov 21 20:28:21 2021 +0800
sddfds
单行显示简单信息,并指定显示数量、提交时间与作者:
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir (master)
$ git log --oneline -5 --author="yunweixiaocai" --before="2021-12-1"
6c62b6a (HEAD -> master) Merge branch 'newbranch'
673df32 master
8d0aefb (newbranch-1) sddfds
6dbf89c Merge branch 'newbranch'
4ef579b modify bbb on master
- git ignore
设置忽略文件,文件不加入版本控制
# 设置使用哪个配置文件
96133@LAPTOP-E2F5BG63 MINGW64 ~/Desktop
$ git config --global core.excludesfile ~/gitignore_global
# 在配置文件中设置ignore规则
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ cat ~/gitignore_global
*.ttt
# 创建与规则相同的文件
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ vim test.ttt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ ls -l
total 3
-rw-r--r-- 1 96133 197609 33 Nov 21 20:45 aaa.txt
-rw-r--r-- 1 96133 197609 16 Nov 21 20:28 bbb.txt
-rw-r--r-- 1 96133 197609 8 Nov 21 21:06 test.ttt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ git status
On branch master
nothing to commit, working tree clean
每个项目单独忽略,使用项目下的.gitignore文件
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ cat .gitignore
*.thisproject
*.gitignore
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ touch aaa.thisproject
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ git status
On branch master
nothing to commit, working tree clean
取消已追踪的文件,不再加入版本控制
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ echo "after git rm --cached aaa.txt" > aaa.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: aaa.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
aaa.txt
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ vim .gitignore
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ echo aaa.txt >> .gitignore
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: aaa.txt
- 获取已跟踪的文件列表
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir
$ git ls-files --full-name
bbb.txt
temp/aaa.thisproject
temp/aaa.txt
- git rev-parse
显示版本库 .git 目录所在的位置。
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir/temp
$ git rev-parse --git-dir
D:/gitlearning/localdir/.git
显示工作区根目录。
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir/temp
$ git rev-parse --show-toplevel
D:/gitlearning/localdir
显示相对于工作区根目录的相对目录。
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir/temp/tmp1/tmp2
$ git rev-parse --show-prefix
temp/tmp1/tmp2/
显示从当前目录(cd)后退(up)到工作区的根的深度。
96133@LAPTOP-E2F5BG63 MINGW64 /d/gitlearning/localdir/temp/tmp1/tmp2
$ git rev-parse --show-cdup
../../../