Git常用命令

配置信息

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

注意:–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。

创建仓库

1
$ git init

添加文件到仓库

1
2
$ git add <file>
$ git commit -m <message>

例如提交readme.txt文件可以这样做:

1
2
$ git add readme.txt
$ git commit -m "第一次提交"

注意:git add 可反复多次使用,添加多个文件,到时候可以直接git commit一次性提交

查看仓库当前状态

1
$ git status

查看文件的改动情况

1
2
3
$ git diff 是只比较比较工作区和暂存区(最后一次add)的区别
$ git diff --cached 是只比较暂存区和版本库的区别
$ git diff HEAD -- filename 是只比较工作区和版本库(最后一次commit)的区别

简单理解:

工作区:存文件的这个仓库(目录)

暂存区:git add添加到的区域

版本库:git commit提交到的区域

流程:

1
工作区修改->git add 添加记录到暂存区->git commit 提交到版本库

查看改动历史记录

git log命令

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ git log
commit 1cc9ea2abcc2a1ab7e962e2f399f7cd704ec7d74 (HEAD -> master)
Author: fyypll fyypll@163.com
Date: Mon Jan 28 02:24:51 2019 +0800

修改了test文件的编码为utf-8

commit b94e156795bf0001e0840500905f29b4683b5c07
Author: fyypll fyypll@163.com
Date: Mon Jan 28 02:17:07 2019 +0800

修改了readme文件并且添加了test文件

commit b50eaa62f6281b46c166ccdacd7ef43b8031e0e9
Author: fyypll fyypll@163.com
Date: Mon Jan 28 01:55:26 2019 +0800

第四次修改,增加了学习Git的说明

commit 03b94083fcecd5c715108620358e1d6ea551193d
Author: fyypll fyypll@163.com
Date: Mon Jan 28 01:50:06 2019 +0800

第三次修改

commit 38448a2844d3c00ec37a25044a44d8aff4a8f24b
Author: fyypll fyypll@163.com
Date: Mon Jan 28 01:43:41 2019 +0800

添加了分割线

commit 60e0866f4d780bf735d3854df8243f219eb42050
Author: fyypll fyypll@163.com
Date: Mon Jan 28 01:37:24 2019 +0800

第一次提交

嫌输出信息太多?可以加上--pretty=oneline参数,显示简略的信息

1
2
3
4
5
6
7
$ git log --pretty=oneline
1cc9ea2abcc2a1ab7e962e2f399f7cd704ec7d74 (HEAD -> master) 修改了test文件的编码为utf-8
b94e156795bf0001e0840500905f29b4683b5c07 修改了readme文件并且添加了test文件
b50eaa62f6281b46c166ccdacd7ef43b8031e0e9 第四次修改,增加了学习Git的说明
03b94083fcecd5c715108620358e1d6ea551193d 第三次修改
38448a2844d3c00ec37a25044a44d8aff4a8f24b 添加了分割线
60e0866f4d780bf735d3854df8243f219eb42050 第一次提交

显示的1cc9ea2abcc2a1ab7e962e2f399f7cd704ec7d74这一类东西是commit id,每次提交都会有一个

版本回退

1
2
3
4
5
6
7
8
退回往上第n个版本
$ git reset --hard HEAD~n
退回指定commit id的版本
$ git reset --hard <commit id>
查看提交日志
$ git log
查看所有运行的命令
$ git refolg

退回以前的版本有两个方法

方法一:

比如退回上一个版本就这样

1
$ git reset --hard HEAD^

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

方法二:

1
$ git reset --hard b94e15

这里,b94e15修改了readme文件并且添加了test文件 这一次提交的commit id,是的,我们只需要输入commit id前面的一部分,Git就会自动找到它。

从新版本退回到旧版本并且已经关闭了命令行窗口,那么再次通过git log已经无法看到原来最新的版本了,情况如下:

退回旧版本前:

1
2
3
4
5
6
7
$ git log --pretty=oneline
1cc9ea2abcc2a1ab7e962e2f399f7cd704ec7d74 (HEAD -> master) 修改了test文件的编码为utf-8
b94e156795bf0001e0840500905f29b4683b5c07 修改了readme文件并且添加了test文件
b50eaa62f6281b46c166ccdacd7ef43b8031e0e9 第四次修改,增加了学习Git的说明
03b94083fcecd5c715108620358e1d6ea551193d 第三次修改
38448a2844d3c00ec37a25044a44d8aff4a8f24b 添加了分割线
60e0866f4d780bf735d3854df8243f219eb42050 第一次提交

执行了回退命令且手贱关闭了命令行窗口,然后重开命令行输入git log --pretty=oneline查看得结果

退回旧版本后:

1
2
3
4
5
6
$ git log --pretty=oneline
b94e156795bf0001e0840500905f29b4683b5c07 (HEAD -> master) 修改了readme文件并且添加了test文件
b50eaa62f6281b46c166ccdacd7ef43b8031e0e9 第四次修改,增加了学习Git的说明
03b94083fcecd5c715108620358e1d6ea551193d 第三次修改
38448a2844d3c00ec37a25044a44d8aff4a8f24b 添加了分割线
60e0866f4d780bf735d3854df8243f219eb42050 第一次提交

完蛋了,修改了test文件的编码为utf-8这一次最新版本的提交记录果然没了,而且我还没记住它的commit id,那怎么退回去?

你需要git reflog命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git reflog
b94e156 (HEAD -> master) HEAD@{0}: reset: moving to b94e15
1cc9ea2 HEAD@{1}: commit: 修改了test文件的编码为utf-8
b94e156 (HEAD -> master) HEAD@{2}: reset: moving to b94e156
60e0866 HEAD@{3}: reset: moving to 60e08
b94e156 (HEAD -> master) HEAD@{4}: commit: 修改了readme文件并且添加了test文件
b50eaa6 HEAD@{5}: reset: moving to b50ea
38448a2 HEAD@{6}: reset: moving to HEAD^^
b50eaa6 HEAD@{7}: reset: moving to b50ea
03b9408 HEAD@{8}: reset: moving to HEAD^
b50eaa6 HEAD@{9}: commit: 第五次修改,增加了学习Git的说明
03b9408 HEAD@{10}: commit: 第三次修改
38448a2 HEAD@{11}: commit: 添加了分割线
60e0866 HEAD@{12}: commit (initial): 第一次上传

这里记录了你执行过的提交命令,ok,找到最新版本的commit id1cc9ea2了,现在,我们又可以回到最新版了

1
2
$ git reset --hard 1cc9ea2
HEAD is now at 1cc9ea2 修改了test文件的编码为utf-8

管理修改

如果做如下操作,那么第二次的修改是不会被提交的

1
第一次修改 -> git add -> 第二次修改 -> git commit

git add后,做了其它修改,然后再提交也只会提交git add之前的修改,想把第二次修改提交还要再git add一次然后提交才行

例如:

1
第一次修改 -> git add ->第二次修改 -> git commit ->git add ->git commit

或者

先不急着提交,第二次修改后再git add,然后提交,相当于把两次修改合并了一块儿提交

1
第一次修改 -> git add -> 第二次修改 -> git add ->git commit