安装 Git

直接搜 git , 官网进行下载(一路next)即可

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

输入如下命令,初始化您的信息

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

创建版本库

什么是版本库呢?版本库又名仓库,英文名 repository ,你可以简单理解成一个目录,这个目录里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

所以,创建一个版本库非常简单

首先,选择一个合适的地方,创建一个空目录:

1
2
3
$ mkdir learngit
$ cd learngit
$ pwd

pwd命令用于显示当前目录。在我的电脑上,这个仓库位于/c/Users/Administrator

第二步、通过git init命令把这个目录变成Git可以管理的仓库:

1
$ git init

输入命令之后,文件夹里便会多出来一个 .git 文件,如果没看到就说明它被隐藏起来了。

第三步、管理文件

新建一个 readme.txt

里面随便写点东西,比如:

1
2
Git is a version control system.
Git is free software.

一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

然后用命令git add告诉Git,把文件添加到仓库:

1
$ git add readme.txt

再然后用命令git commit告诉Git,把文件提交到仓库:

1
$ git commit -m "wrote a readme file"

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

那么为什么 Git 添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

1
2
3
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容:

1
2
Git is a distributed version control system.
Git is free software.

现在,运行git status命令看看结果:

1
2
3
4
5
6
7
8
9
$ git status
-------------------------
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: readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:

1
2
3
4
5
6
7
8
9
10
11
$ git diff readme.txt
-------------------------------------
diff --git a/readme.txt b/readme.txt
index d8036c1..013b5bc 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
\ No newline at end of file

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add

1
$ git add readme.txt

同样没有任何输出。在执行第二步git commit之前,我们再运行git status看看当前仓库的状态:

1
2
3
4
5
6
7
$ git status
-----------------------------
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

modified: readme.txt

git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

1
2
3
4
$ git commit -m "second time"
--------------------------------------
[master e475afc] add distributed
1 file changed, 1 insertion(+), 1 deletion(-)

提交后,我们再用git status命令看看仓库的当前状态:

1
2
3
4
$ git status
--------------------------
On branch master
nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。

版本回退

当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git log
$ git log --pretty=oneline
# 一条线输出 日志
------------------------------------
commit e6f53e37dd047778fce40ec32c6d849035be3458 (HEAD -> master)
Author: fqy7 <qingyun-feng@qq.com>
Date: Thu Jul 8 13:46:02 2021 +0800

second time

commit a0c23de67c068ed4ef2541f7cf4526afbb20faa2
Author: fqy7 <qingyun-feng@qq.com>
Date: Thu Jul 8 13:35:20 2021 +0800

wrote a readme file

git log命令显示从最近到最远的提交日志。

好了,现在我们想把readme.txt回退到上一个版本,也就是wrote a readme file的那个版本,怎么做呢?

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

现在,我们要把当前版本append GPL回退到上一个版本wrote a readme file,就可以使用git reset命令:

1
2
3
$ git reset --hard HEAD^
---------------------------------
HEAD is now at a0c23de wrote a readme file

那如果又想回去怎么办?

使用git reflog

1
2
3
4
5
$ git reflog
----------------------
a0c23de (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
e6f53e3 HEAD@{1}: commit: second time
a0c23de (HEAD -> master) HEAD@{2}: commit (initial): wrote a readme file

每行前面的都是每次版本的 id

再次输入reset然后加上对应的id号(可以只输入前几位)

1
2
3
$ git reset --hard e6f5
-------------------------
HEAD is now at e6f53e3 second time

三连

git add xxx

git commit -m "xxx"

git push(如果需要远程上传的话)