●git init——初始化仓库
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
Initialized empty Git repository in /Users/hirocaster/github/github-book
/git-tutorial/.git/
如果初始化成功,执行了git init命令的目录下就会生成.git目录。这个.git目录里存储着管理当前目录内容所需的仓库数据。
在Git中,我们将这个目录的内容称为“附属于该仓库的工作树”。
●git status——查看仓库的状态
git status命令用于显示Git仓库的状态。这是一个十分常用的命令,请务必牢记。
$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
尚没有可提交的内容,就是说当前我们建立的这个仓库中还没有记录任何文件的任何状态。
●git add——向暂存区中添加文件
要想让文件成为Git仓库的管理对象,就需要用git add命令将其加入暂存区(Stage或者Index)中。暂存区是提交之前的一个临时区域。
$ git add README.md
$ git status
# On branch master#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README.md
#
将README.md文件加入暂存区后,git status命令的显示结果发生了变化。可以看到,README.md文件显示在Changes to be committed中了。
●git commit——保存仓库的历史记录
git commit命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。通过这些记录,我们就可以在工作树中复原文件。
记述一行提交信息
我们来实际运行一下git commit命令。
$ git commit -m "First commit"
[master (root-commit) 9f129ba] First commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
-m参数后的"First commit"称作提交信息,是对这个提交的概述。
记述详细提交信息
刚才我们只简洁地记述了一行提交信息,如果想要记述得更加详细,请不加-m,直接执行git commit命令。执行后编辑器就会启动,并显示如下结果。
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README.md
#
在编辑器中记述提交信息的格式如下。
●第一行:用一行文字简述提交的更改内容
●第二行:空行
●第三行以后:记述更改的原因和详细内容
只要按照上面的格式输入,今后便可以通过确认日志的命令或工具看到这些记录。
在以#(井号)标为注释的Changes to be committed(要提交的更改)栏中,可以查看本次提交中包含的文件。将提交信息按格式记述完毕后,请保存并关闭编辑器,以#(井号)标为注释的行不必删除。随后,刚才记述的提交信息就会被提交。
中止提交
如果在编辑器启动后想中止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被中止。
查看提交后的状态
执行完git commit命令后再来查看当前状态。
$ git status
# On branch master
nothing to commit, working directory clean
当前工作树处于刚刚完成提交的最新状态,所以结果显示没有更改。
●git log——查看提交日志
git log命令可以查看以往仓库中提交的日志。
我们先来看看刚才的git commit命令是否被记录了。
$ git log
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:492013 +0900
First commit
如上图所示,屏幕显示了刚刚的提交操作。commit栏旁边显示的“9f129b……”是指向这个提交的哈希值。Git的其他命令中,在指向提交时会用到这个哈希值。 Author栏中显示我们给Git设置的用户名和邮箱地址。Date栏中显示提交执行的日期和时间。再往下就是该提交的提交信息。
只显示提交信息的第一行
如果只想让程序显示第一行简述信息,可以在git log命令后加上--pretty=short。
$ git log --pretty=short
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
First commit
只显示指定目录、文件的日志
只要在git log命令后加上目录名,便会只显示该目录下的日志。如果加的是文件名,就会只显示与该文件相关的日志。
$ git log README.md
显示文件的改动
如果想查看提交所带来的改动,可以加上-p参数,文件的前后差别就会显示在提交信息之后。
$ git log -p
比如,执行下面的命令,就可以只查看README.md文件的提交日志以及提交前后的差别。
$ git log -p README.md
如上所述,git log命令可以利用多种参数帮助开发者把握以往提交的内容。不必勉强自己一次记下全部参数,每当有想查看的日志就积极去查,慢慢就能得心应手了。
●git diff——查看更改前后的差别
git diff命令可以查看工作树、暂存区、最新提交之间的差别。
查看工作树和暂存区的差别
执行git diff命令,查看当前工作树与暂存区的差别。
$ git diff
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程
由于我们尚未用git add命令向暂存区添加任何东西,所以程序只会显示工作树与最新提交状态之间的差别。
这里解释一下显示的内容。“+”号标出的是新添加的行,被删除的行则用“-”号标出。我们可以看到,这次只添加了一行。
用git add命令将README.md文件加入暂存区。
$ git add README.md
查看工作树和最新提交的差别
如果现在执行git diff命令,由于工作树和暂存区的状态并无差别,结果什么都不会显示。
执行以下命令。
$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程
不妨养成这样一个好习惯:在执行git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。这里的HEAD是指向当前分支中最新一次提交的指针。
由于我们刚刚确认过两个提交之间的差别,所以直接运行git commit命令。
$ git commit -m "Add index"
[master fd0cbf0] Add index
1 file changed, 1 insertion(+)
保险起见,我们查看一下提交日志,确认提交是否成功。
$ git log
commit fd0cbf0d4a25f747230694d95cac1be72d33441d
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:10:152013 +0900
Add index
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:492013 +0900
First commit
成功查到了第二个提交。
参考资料
《GitHub入门与实践》
可直接网上搜索电子教材下载(不做伸手党🦅);
在读书APP上(推荐微信读书,可以白嫖)搜索,加入书架阅读。
一个以游戏形式练习Git的网站:Learn Git Branching(回来你会感谢我的)
🏹每日分享🏹:
一根会思考的芦苇。我追求自己的尊严,绝不是诉诸空间,而是诉诸对自己思想的掌控。如果已经拥有自己的世界,我就不再需要其他。宇宙通过空间囊括了我,吞没了我,使我犹如一个原子,但通过思想,我囊括了整个宇宙。
一《人是一根会思考的芦苇》