目录
Git
1、开始版本控制
1.1、初始化Repository
新建一个目录,并使用git init
命令初始化Repository:
mkdir mygit
git init
git init
命令会在mygit目录中创建一个.git
目录。
1.2、使目录脱离Git控制
Git的版控很单纯,全都是靠.git目录在做事。如果这个目录不想被版控,或者只想给客户不含版控记录的内容,只要把.git目录移除,Git就对这个目录失去控制权了。
2、把文件交给Git管控
2.1、创建文件后交给Git
创建一个内容为"hell, git"的文件,并命名为welcome.html:
echo "hello, git" > welcome.html
使用git status
命令查看状态:
这个welcome.html文件当前的状态是Untracked files
,即这个文件尚未被加到Git版控系统中,还未正式被Git“追踪”,只是刚刚加入这个目录而已。
使用git add
命令,把welcome.html文件交给Git,让Git开始追踪它:
git add welcome.html
再次使用git status命令查看当前的状态:
从以上信息可以看出,文件状态已从Untracked
变成new file
。这表示该文件已经被安置到暂存区(Staging Area)。
2.2、git add之后再次修改文件
设想一下下面这样一种情境:
- 新增了一个文件abc.txt。
- 执行git add abc.txt命令,把文件加至暂存区。
- 编辑abc.txt文件。
echo "hello world" > abc.txt
git add abc.txt
echo "hw" > abc.txt
完成编辑后,可能想要进行Commit,把刚刚改动的内容保存下来。这是新手很容易犯的错误之一,以为执行Commit命令就能把所有的异动都保存下来,事实上这样的想法是不正确的。执行git status命令,看一下当前的状态:
可以发现,abc.txt文件变成了两个,步骤(2)的确把abc.txt文件加入暂存区了,但在步骤(3)中又编辑了该文件。对Git来说,编辑的内容并没有“再次被加入暂存区,所以此时暂存区中的数据还是步骤(2)中加进来的那个文件。
如果确定这个改动是你想要的,那就再次使用git add abc.txt
命令,把abc.txt文件加入暂存区。
2.3、git add “–all"与”."参数区别
Git 1.x:
参数 | 新增文件 | 改动文件 | 删除文件 |
---|---|---|---|
--all |
是 | 是 | 是 |
. |
是 | 是 | 否 |
Git 2.x:
参数 | 新增文件 | 改动文件 | 删除文件 |
---|---|---|---|
--all |
是 | 是 | 是 |
. |
是 | 是 | 是 |
也就是说,在Git 2.x之后,这两个参数在功能上就没什么区别了。
2.4、把暂存区的内容提交到存储库里存档
如果仅是通过git add
命令把异动加到暂存区,还不算是完成整个流程。如果想让暂存区的内容永久保存下来,就要使用git commit
命令。
git commit -m "init commit"
在后面加上-m "init commit"
是要说明“这次的Commit做了什么事”,只要使用简单、清楚的文本说明即可,中英文都可以,重点是要说清楚,能让自己和别人很快明白就行。
在执行git commit
命令时,如果没有在后面加上信息参数,默认会弹出一个黑色的画面,也就是编辑器——Vim。让我们输入提交信息:
另外,如果没有内容,也可以Commit,只要加上--allow-empty
参数。
git commit --allow-empty -m "empty commit"
3、工作区、暂存区与存储库
3.1、二段式提交
在Git中,针对工作目录、暂存区以及存储库3个主要区域,可以通过不同的Git命令,把文件移往不同的区域,如图所示:
3.2、跳过add直接commit
如果觉得先add再commit有点烦琐,可以在Commit时多加一个-a
参数,缩短这个流程:
echo "ccc" > c.txt
git commit -a -m "quick commit test."
这样即使没有先add,也可以完成Commit。但要注意的是,这个-a
参数只对已经存在于Repository区域的文件有效,对新加入(也就是Untracked files)的文件是无效的。
4、查看Commit记录
4.1、使用git log命令
git log
越新的信息会显示在越上面。从上面这段信息中大致可以看出以下内容:
- Commit的作者是谁
- 什么时候Commit的
- 每次的Commit大概做了些什么事
在使用git log
命令时,如果加上额外参数,可以看到不一样的输出格式。例如,加上--oneline
和–-graph
参数:
git log --oneline --graph
输出的结果就会更为精简,可以一次性看到更多的Commit。
4.2、查询历史记录常用条件
想要找某个人或某些人的Commit:
# 使用 --author参数
git log --oneline --author="ActonZhang"
# 使用 | 表示或者,注意使用时需要加上\进行转义
git log --oneline --author="ActonZhang\|Tom"
想要找Commit信息中是否包含有某些关键字:
# 使用 --grep 参数
git log --oneline --grep="second"
想要找Commit文件中的内容:
# 使用 -S 参数
git log -S "hw"
想要找某一段时间内的Commit:
# 使用 --since --until --after 参数
# 查询今天上午9点到下午11点之间的Commit