0%

写给Traceless的Git简明教程!

前言

这是 Palind 写给他的朋友 TracelessGit 简明教程

Traceless 是北京理工大学的一名优秀的本科生。聊天时,他提到想学习 Git 和 Github。

于是,Palind 想要给他写一份 Git 的简明教程。

本文章将主要按照第二人称 的形式,来为 Traceless 介绍 Git 的最基本的 用法。除了 Traceless,你也可以阅读本文一起学习!笔者也是新手哦,希望读者多多包涵。

参考资料

简介 - Git教程 - 廖雪峰的官方网站(主要参考)

Git 教程 | 菜鸟教程

写给 Traceless 的 Git 简明教程

简介

Traceless酱,很高兴能和你一起学习 Git。Git 是 Linus 设计的一种分布式版本控制系统。简单来说,Git是一种可以记录你或他人对某些文件每次进行的修改历史的软件,以此实现多人对文件的管理、开发和历史版本维护。回忆一下你英语课或者其他什么课制作 Pre 的 PPT 的时候,你一定曾多次对 PPT 进行修改。那么,你的英语课文件夹里,可能就会有不少命名为 pre.pptx、pre-副本.pptx、pre-最终版.pptx、pre-最终最终版.pptx 的冗杂文件。通过 Git,你就可以记录文件的改动,而不是手动创建副本了。

而 GitHub 是一个网站,它里面有很多开源项目的 Git 存储。你可以通过 Git 参与 GitHub 上的项目的开发、复刻、维护。

安装

鉴于你是 Windows 系统,你可以点击 Git - Downloads 来下载 Git。安装完成后,你可以在开始菜单里找到 Git 文件夹。点击后,就可以看到 Git Bash。

2

Git Bash 是一种可以让你的 Windows 系统运行 shell 命令和 Git 命令的命令行工具。现在,你可以把你的电脑当作 Linux 用了。不过,它并不是真正完整的 Linux 环境。

点击 Git Bash 就可以开始进行配置了。你要在 Git Bash 里输入:

1
2
$ git config --global user.name "你的名字"
$ git config --global user.email "你的邮箱@你的邮箱.com"

注意,美元符号$ 是自带的,你不用自己打出来。双引号要打出来。

仓库

Git 是以仓库 (Repository)为单位来保存、追踪和管理文件的更改历史的。可以将仓库理解为一个目录,里面的文件的任何修改变化都会被 Git 追踪。(追踪可以精确到行)

一般来说,仓库被程序员们用来放源代码。不过你要是想用 Git 管理别的文本文件也可以。注意,不能(或者说不适合)用 Git 管理你的英语课 Pre 的 PPT ,因为 Git 是被设计用来管理 纯文本文件 的,比如 .txt.md.py.cpp.html 这样的源码或文本类文件。而像 PPT 的 .pptx 文件是 二进制文件,Git 对它的更改是无法逐行追踪的(也就是 Git 没法讲清楚你的某版 PPT 改动了什么位置),而只能把它当成一个整体文件来看,即每次改动PPT时,Git 都要存一份完整的新版本 PPT 文件,不能只存“差异”,这就导致仓库越来越大。

创建仓库

我们来动手创建一个仓库。

打开 Git Bash,注意到你现在的路径是一个波浪号~,它代表你目前所在的路径是c/Users/你的用户名,这是一个 C 盘的路径。

我们不动 C 盘,而是去 D 盘进行创建仓库的学习。在 Git Bash 中输入(同样的,你不用输入$符号,它给你在前面写好了):

1
$ cd d:

现在,你进入了 D 盘。我们在 D 盘创建一个新目录吧,输入:

1
2
$ mkdir learngit
$ cd learngit

第一行命令是创建一个名字叫 learngit 的文件夹,第二行命令是进入这个文件夹。

现在,我们已经在目标文件夹里了,我们输入

1
$ git init

我们就成功在目标文件夹中创建了一个仓库。现在,你打开 learngit 文件夹,并在“查看”中打开“隐藏的项目”,就能看到刚刚创建的 .git 隐藏文件夹,如图:

3

这个 .git 文件夹里的东西,就是 Git 用来跟踪管理版本的文件。如果里面的文件损坏,仓库就损坏了。

此外,你会看到你的 Git Bash 中,路径后面跟着一个小括号,写着

5

这代表你当前在主分支 master 里。

向仓库中添加文件

我们来向仓库中添加一个名为readme.txt的文件吧。Github 上几乎每个项目都有 readme 文件,它的作用是介绍项目。

首先,在刚刚的 learngit 文件夹里,创建一个readme.txt文件,在里面随便写上你想写的内容,如图,

4

保存文件后,我们回到 Git Bash(你刚刚没有关闭它吧?不要关闭,不然路径仓库不正确),输入:

1
$ git add readme.txt

现在,你已经把 readme.txt 这个文件添加到了暂存区(Staging Area)。注意这只是告诉 Git:“这个文件是我准备好要提交的,你先记录下来。”

你可以通过这个操作,再向暂存区里添加你需要的文件。之后,你要输入

1
$ git commit -m "写了一个 readme.txt"

这个步骤叫提交。提交完成后,Git Bash 会显示:

1
2
3
[master (root-commit) e9…一堆哈希值…a5] 写了一个 readme.txt
1 file changed, 3 insertions(+)
create mode 100644 readme.txt

我们来解释一下,你输入的 git commit 的 -m 后面跟着的参数是一个字符串,它是你自己写的,代表这一次提交的简要说明,例如“添加了某某文件”。

Git Bash 的那一堆输出中,第一行是

1
[master (root-commit) e9…一堆哈希值…a5] 写了一个 readme.txt

其中,master 代表这次提交是在名为 master 的分支上完成的。Git 默认 master 为主分支。

(root-commit) 代表这次提交是这个仓库的第一次提交,所以它叫“根提交”。

e9…一堆哈希值…a5是 Git 为这次提交生成的提交哈希值(commit hash),用来辨识这个提交。可以理解为,这次提交的名字叫“e9…一堆哈希值…a5”。我们看到的是它的前几位。

写了一个 readme.txt 是你刚刚写的对这一次提交的简要说明。

第二行是

1
1 file changed, 3 insertions(+)

这一行代表在这次提交中,有 1 个文件发生了改动,总共添加了 3 行内容

第三行是

1
create mode 100644 readme.txt

这一行代表 Git 在这次提交中新建了一个文件 readme.txt,并且它的权限模式是 100644

总结一下,添加一个文件,先git add <file>git commit -m <message>

版本维护

修改文件

你先修改你刚刚的文件,

6

保存后,再输入

1
2
$ git add readme.txt
$ git commit -m "修改了 readme 文件"

现在,输入 git status 来查看当前仓库的状态,会显示

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

说明没问题,当前没有需要提交的修改,工作目录干净。

版本回退

第一次提交中,我们的 readme.txt 是

1
2
3
你好!Hello World!
这是一个 readme 文件,它可以介绍这个仓库的项目。
这个文件到此结束。

第二次是

1
2
3
你好!Hello World!
这是一个 readme 文件,它可以介绍这个仓库的项目。
这个文件到此结束。才怪!这个文件现在被修改了!

我们输入git log查看,得到输出

1
2
3
4
5
6
7
8
9
10
11
12
13
$ git log
commit 0a…一堆哈希值…18 (HEAD -> master)
Author: 名字 <邮箱>
Date: Fri Jun 27 11:58:00 2025 +0800

修改了 readme 文件

commit e9…一堆哈希值…aa
Author: 名字 <邮箱>
Date: Fri Jun 27 10:55:22 2025 +0800

写了一个 readme.txt

我们现在处于修改了 readme 文件的版本,如果想要回退导创建 readme.txt 的版本,可以输入

1
$ git reset --hard HEAD^

或者

1
$ git reset --hard e9…一堆哈希值…aa

就会显示

1
HEAD is now at e9fdaa5 写了一个 readme.txt

此时,你打开 readme.txt 会惊讶地发现,

7

回退到了一开始的版本。想要重新回到最新的版本,需要输入

1
$ git reset --hard 0a9…一堆哈希值…618

事实上,这堆哈希值你只需要输入前几位就行了,Git会自己找到的,即输入

1
$ git reset --hard 0a9b

就能成功回到最新版本。对于参数--hard,代表回退到上个版本的已提交状态;如果是--soft会回退到上个版本的未提交状态,而--mixed会回退到上个版本已添加但未提交的状态。

8

此外,使用命令git reflog可以查看你之前输入的让 HEAD 移动的所有命令,以及输入命令时,HEAD 被移动后处于的版本的ID哈希值。

撤销修改

git checkout -- 文件名可以丢弃工作区的修改,让这个文件回到最近一次git commitgit add时的状态。

git reset HEAD 文件名可以把暂存区的修改撤销(unstage),并放回工作区。

删除文件

我们在文件夹里直接删除 readme.txt(拖到回收站之类的删除),输入git status命令,得到输出

9

如果确实要删除这个文件,就

1
2
$ git rm readme.txt
$ git commit -m "删除了 readme 文件"

如果不要删除这个文件,就

1
$ git checkout -- test.txt

通过这个命令来用版本库的版本替换工作区的版本。

GitHub(远程仓库托管)

GitHub 可以托管你的仓库,也可以让你拉取别人的仓库。要链接到 Github,你可以选择 HTTPS 或 SSH。我的建议是使用 SSH。

创建 SSH 密钥

① 生成新 SSH 密钥

打开你的 Git Bash,输入

1
$ ssh-keygen -t ed25519 -C "你的邮箱@地址"

如果之前没有创建过 SSH 密钥,接下来,你就点回车即可,直到它出现

1
2
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

这时,你要为你的 SSH 密钥设置一个密码。

② 将 SSH 密钥添加到 ssh-agent

首先,复制以下行并将其粘贴到 Git shell 中的 ~/.profile~/.bashrc 文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi

unset env

然后,重新启动 Git Bash,你应该会看到它要求你输入 SSH 的密码。你要正确输入密码后按回车。

现在,以管理员身份运行 powershell,输入

1
ssh-add c:/Users/你的用户名/.ssh/id_ed25519

③将 SSH 公钥添加到 Github 上的账户

按这个文档走就行:新增 SSH 密钥到 GitHub 帐户 - GitHub 文档

添加远程仓库

现在,你希望把本地的仓库与 Github 上托管的仓库远程同步。

打开 Github,点击Create a new repo,设置你按需设置,然后就创建成功了一个空空的仓库。

打开 Git Bash,通过cd命令进入你之前创建的本地仓库的路径,然后运行

1
$ git remote add origin git@github.com:[你的Github用户名]/[你刚刚创建的Github仓库的名字].git

注意,除了“[”和“]”不用写上,其他的符号都要写上,包括“/”等。

解释一下这行命令,这将远程库的名字命名为 origin,这样符合习惯命名。

接下来,你可以通过git push,将你本地的仓库推送到 Github 上的远程仓库了,运行

1
$ git push -u origin master

这样就把当前分支master推送到远程仓库了。注意这是第一次push,所以加上了-u参数,将本地的master分支和远程的master分支关联起来。以后就不需要了,本地做了git commit提交后,只需要运行

1
$ git push origin master

就可以成功推送了。

如果要删除远程库,

1
$ git remote rm origin

(本质是删除绑定关系,Github 上的仓库不会被删除)

克隆远程仓库

如果你在逛 Github 的时候,遇到了自己喜欢的项目,想要研究源代码,就先用cd命令到合适的路径下,再运行

1
$ git clone git@github.com:你要克隆的项目的作者名字/你要克隆的项目名字.git

你也可以用 HTTPS 协议,即

1
$ git clone https://github.com/作者名字/项目名字.git

贡献开源社区

你可以先fork别人的仓库,修改fork来的仓库里的代码后,通过pull request来请求仓库主人采用你的代码。

分支管理

你可以在这个小游戏中学会 Git 的分支管理:Learn Git Branching

分支管理是 Git 的精髓之一,不过这是简明教程,就不展开讲了。

结语

Traceless酱,希望你能通过这篇文章了解 Git 的简单使用!!