因为我使用的是 Windows 系统,所以以下笔记都基于 Windows 系统写就。如果以后有精力玩 Linux 或者有钱买 MacBook,可能会开新的笔记。

哥们并非专业人士,所有知识都来自于到处查找资料和自己的摸索,因此并不系统,也有很多错漏。如果有任何意见和建议,请在评论区给我提喵🥺我很会说谢谢。

Git是什么

Git是一款版本控制系统。具体的原理介绍很容易在互联网上查到。可以参考这里

为了便于阅读以下笔记,在此简要介绍一下 Git 的某些基本原理。

基础概念

Git 里有三个最基础的概念:工作区暂存区版本库

  • 工作区:在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在.git目录下的 index 文件(.git/index)中,所以暂存区也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库。
被命名为「1」的整个文件夹就是工作区,「.git」是版本库,进入版本库可以看到暂存区。
被命名为「1」的整个文件夹就是工作区,「.git」是版本库,进入版本库可以看到暂存区。

工作流程

  1. 在工作区中修改文件
    假设被修改的文件名为Akiyama.txt
  2. 工作区 -> 暂存区
    使用git add命令将工作区中的修改添加到转存区。
    1
    git add Akiyama.txt
  3. 暂存区 -> 版本库
    使用git comment命令将工作区中的修改提交到转存区。
    1
    git commit -m "Commit message"
  4. 版本库 -> 远程仓库
    使用git push命令将本地版本库中的修改推送到远程仓库。

这就是Git最基本的工作流程。Git 其他功能都是基于这几个概念实现的。

Git安装

直接 Google 一下「Git」就能下载了。或者直接前往官网下载。

因为众所周知的原因,别用百度。除非对自己的信息识别能力很有信心。

Git使用简介的简介

Git 最基础的使用无非就是「创建新仓库,克隆,添加,提交,推送」几点。

创建新仓库

此时我们新建一个空文件夹,这个空文件夹即将用来存放工程文件。

打开这个文件夹,然后执行:

1
git init

现在,我们在这个文件夹内创建了一个新的 Git 仓库。进入文件管理器可以看到一个名为.git的文件夹,这里面是版本库。

克隆

这一步并不是必须的。

有时候,我们需要克隆已经存在的库——这个库可能是本地仓库,也可能是远端服务器上的仓库。类似svn checkout,我们使用git clone来从现有的 Git 仓库里拷贝项目。

1
git clone <repo> <name>
参数说明
1
2
3
4
5
6
<repo>:原仓库的地址。
- 这个地址既可以是本地仓库的地址,也可以是远端服务器上的仓库。
- 如果是本地仓库,参数会是这个样子:/path/to/repository,比如F:/teigensu/git-test.git。
- 如果是远端服务器上的仓库,参数则会是:username@host:/path/to/repository,比如git@github.com:teigensu/git-test.git。
<name>:自定义本地仓库名字。
- 这个参数并不是必须。
举个例子

我们现在有一个远程仓库github.com/teigensu/git-test,则可以通过git clone拷贝到本地。

1
2
3
4
5
6
7
$ git clone git@github.com:teigensu/git-test.git
Cloning into 'git-test'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (6/6), done.

如果觉得git-test这个名字不好看,可以改成其他名字,比如tset-tig等。命令和运行结果如下所示。
1
2
3
4
5
6
7
$ git clone git@github.com:teigensu/git-test.git tset-tig
Cloning into 'tset-tig'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (6/6), done.

这两条命令的效果如下图所示。方便起见,我在同一个文件夹下执行了这两个命令,正好做对比。

克隆之后的效果
克隆之后的效果

添加

修改本地文件后,可以通过git add把更改添加到暂存区。

1
2
3
4
5
git add <filename>
或者
git add *
或者
git add .
参数说明
1
2
3
4
5
<filename>:指定文件的文件名。
如果输入了文件名,那么只会添加该文件的更改。
* 或 .:添加所有更改。
- *:不包含「.」开头的隐藏文件。
- .:包含所有文件。
举个例子

现在,我们修改了hello.cpp的内容。ctrl s保存文件后,可以通过以下方式添加到暂存区。

1
$ git add hello.cpp

不出意外的话,什么都不会显示。这就对了。

添加成功
添加成功

提交

将更改添加到暂存区后,可以通过git commit实际提交改动。

1
git commit -m "Commit message"
参数说明
1
2
Commit message:本次提交的说明。可以是任意内容。
- 建议输入有意义的内容。但也可以只输个空字符。
举个例子

添加了hello.cpp之后,确认没有错误就可以提交。

1
2
3
4
$ git commit -m "1.0.0"         
[master (root-commit) ea5ef77] 1.0.0
1 file changed, 6 insertions(+)
create mode 100644 hello.cpp

运行结果如下图。

提交成功
提交成功

推送

如果需要将本地仓库推送到云端,比如 GitHub,应当使用git push命令。

Git 许多命令都是在本地执行,因此如果要分享代码、与其他人合作,或者将数据存储到云端,就需要将数据放到服务器上。
本笔记以 GitHub 为例。因为博主目前只用得到 GitHub 。

添加远程仓库

1
2
3
git remote add <shortname> <url>
git remote //查看当前配置了哪些远程仓库
git remote //查看每个别名的实际地址
参数说明
1
2
3
4
<shortname>:为仓库指定一个名字,方便后续引用。
- 一般可以直接用 origin。
- 不一定是仓库的名字。可以随便取,比如 HatsuneMiku(一般不会有人给仓库取这个名字吧)。
<url>:仓库地址

请注意,如果推送到 GitHub 上的话,需要提前配置验证信息。由于本地 Git 仓库和 GitHub 仓库之间的传输是通过 SSH 加密的,所以我们需要先生成 SSH Key

生成 SSH Key
举个例子

推送到远程仓库

1
git push <shortname> <branch>
参数说明
1
2
<shortname>:远程仓库的指定名字。
<branch>:推送的分支名字。

提取远程仓库的内容

1
2
git fetch //从远程仓库下载新分支与数据
git merge //从远端仓库提取数据并尝试合并到当前分支

删除远程仓库

1
git remote rm <shortname>
参数说明
1
<shortname>:远程仓库的指定名字。