什么是 Git

Git 是一个开源的分布式版本控制系统(Distributed Version Control System, DVCS)。

作用:把项目中文件的每一次变化都记录下来,并让你能随时回到任意一个历史状态,同时支持多人在不同环境下并行开发、最后再把各自的成果合并到一起。无论项目规模是几个人的小工具,还是成千上万文件的大型工程,Git 都能高效管理版本,并且在团队协作中保持清晰、可追溯的改动历史。

安装 Git,Git - Install

安装好后,打开 GitBash,输入下面两条指令进行配置

git config --global user.name <Your Name>

git config --global user.email <email@example.com>

这两条指令是告诉 Git 每次提交的作者是谁,邮箱是什么

git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

创建仓库

版本库/仓库(repository)里面的所有文件都可以被 Git 管理起来,每个文件的修改,删除,Git 都能跟踪,以便任何时候都可以追踪历史,需要的时候也可以还原

  1. 新建一个新目录,右键空白处 Open Git Bash Here

    1
    2
    3
    4
    5
    6
    # 创建 learngit 目录(这个目录是工作区)
    mkdir learngit
    # 进入这个文件夹
    cd leangit
    # 显示当前路径
    pwd
  2. 使用 git init 命令初始化仓库,把这个目录变成 Git 可以管理的仓库

  3. 可以点击查看隐藏的文件,一个 .git 文件夹已经创建好

    也可以使用 ls -ah 命令查看 .git 文件夹

把文件添加到本地仓库

learngit 目录下创建一个 readme.txt 文件(建议所有文本编辑都使用 VS code,而不要使用 Windows 自带的记事本),内容如下

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

将文件放入 Git 仓库,只需两步

  1. 执行 git add readme.txt 命令,告诉 Git 把文件添加到暂存区(Staging Area / Index),没有任何显示,就对了

  2. 执行 git commit -m "***" 命令,告诉 Git 把文件提交到本地仓库(星号为这次提交的说明,不建议省略)

    1
    2
    3
    4
    $ git commit -m "wrote a readme file"
    [master (root-commit) 1b0fd94] wrote a readme file
    1 file changed, 2 insertions(+)
    create mode 100644 readme.txt

也可以一次修改多个文件,然后使用命令 git add .. 表示当前目录,所以这条命令表示:把当前目录及其子目录中所有修改(包括删除)过的文件、以及新创建的文件,全部加入暂存区。

或者分别添加到暂存区

1
2
git add file1.txt
git add file2.txt file3.txt

然后再执行 git commit -m "***"

Git 基本操作

修改 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 diff readme.txt 命令查看具体修改内容

1
2
3
4
5
6
7
8
9
10
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 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.

然后添加到 git add readme.txt 暂存区,再次查看当前状态 git status

1
2
3
4
5
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: readme.txt

已加入暂存区、修改即将被提交,下一步运行 git commit -m "***",然后 git status

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

Git 告诉我们没什么需要提交,工作目录是干净的

版本回退

再次修改 readme.txt 文件

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

然后提交至仓库 add --> commit

现在有三个版本

1
2
3
4
5
6
7
8
9
版本1
Git is a version control system.
Git is free software.
版本2
Git is a distributed version control system.
Git is free software.
版本3
Git is a distributed version control system.
Git is free software distributed under the GPL.

使用 git log 命令查看提交历史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
commit de71edb4b817190c26fd43e0bdde6c0c0fd09b0f (HEAD -> master)
Author: Wenqi <wq.shang.cn@gmail.com>
Date: Fri Feb 20 19:20:43 2026 +0800

append GPL

commit 29a7a611056d15a2ea259d4ce5593a1cf6a588b0
Author: Wenqi <wq.shang.cn@gmail.com>
Date: Fri Feb 20 19:15:22 2026 +0800

add distributed

commit 1b0fd94bce91cb42c05469e23eb16ad6ead1d8c6
Author: Wenqi <wq.shang.cn@gmail.com>
Date: Fri Feb 20 17:16:09 2026 +0800

wrote a readme file

也可以加上 --pretty=oneline 简化输出信息,git log --pretty=oneline

1
2
3
4
$ git log --pretty=oneline
de71edb4b817190c26fd43e0bdde6c0c0fd09b0f (HEAD -> master) append GPL
29a7a611056d15a2ea259d4ce5593a1cf6a588b0 add distributed
1b0fd94bce91cb42c05469e23eb16ad6ead1d8c6 wrote a readme file

假如想把 append GPL 版本退回到 add distributed 版本,使用 git rest 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# git reset 语法格式
git reset [--soft | --mixed | --hard] [HEAD]
--soft 回退到未提交状态
--mixed 回退到已添加但未提交的状态
--hard 回退到已提交状态
不写的话默认 --mixed 一般使用 --hard

# 回退所有内容到上一个版本
git reset HEAD^
# 回退到上上上一个版本
git reset HEAD~3 或者 git reset HEAD^^^
# 回退 readme.txt 文件至上一个版本
git reset HEAD^ readme.txt
# 回退到指定版本,此处的四个数字字母为 commit ID 的前几个,Git 会自动查找对应的版本,可以比四个多但不能比四个少
git reset 1b0f


# 查看 readme.txt 文件
cat readme.txt

运行 git reset --hard 1b0f 回退到 wrote a readme file 版本,然后 git log 查看提交历史

1
2
3
4
5
6
$ git log
commit 1b0fd94bce91cb42c05469e23eb16ad6ead1d8c6 (HEAD -> master)
Author: Wenqi <wq.shang.cn@gmail.com>
Date: Fri Feb 20 17:16:09 2026 +0800

wrote a readme file

此时仅剩下 wrote a readme file 版本的信息,若想返回到 append GPL 版本,翻找此版本对应的 commit ID (别关闭命令行窗口,如果关闭了可以使用 git reflog 来查看命令历史) 运行 git reset --hard de71edb ,然后就又恢复为 append GPL 版本了

工作区和暂存区

工作区(Working Directory):是电脑里能看到的目录,如 learngit 文件夹

暂存区(stage/index):一般存放在 .git 目录下的index 文件(.git/index)中,所以把暂存区有时也叫作索引(index)。

版本库(Repository):工作区里的隐藏目录 .git ,这个不算工作区,是 Git 的版本库

工作流程

Git 版本库里有缓存区,还有 Git 自动创建的第一个分支 master ,以及指向master 的一个指针叫 HEAD

git add 将“文件修改”添加到暂存区,然后 git commit 提交更改,把暂存区的所有内容提交到当前分支。

撤销修改

  1. 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,使用 git restore

更改 readme.txt 文件,保存

1
2
3
4
5
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.

运行 git status 查看当前状态

1
2
3
4
5
6
$ 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)

使用 git restore readme.txt 丢弃工作区的更改,让这个文件返回到最近一次 git addgit commit 时的状态

  1. 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,使用 git restore --staged
1
2
3
4
5
6
$ git add readme.txt
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: readme.txt

使用 git restore --staged readme.txt 把暂存区的修改撤销(unstage)
然后 git restore readme.txt 丢弃工作区的修改,文件恢复成未修改状态

删除文件

1
2
3
4
5
# 创建一个新的文本文件,然后随便写点内容,保存
touch newfile.txt

git add newfile.txt
git commit -m "add a new file"

使用 git rm 命令将文件从暂存区和工作区中删除

1
2
$ git rm newfile.txt
rm 'newfile.txt'

确认删除 git commit

1
2
3
4
$ git commit -m "delete newfile"
[master d788878] delete newfile
1 file changed, 1 deletion(-)
delete mode 100644 newfile.txt

如果删错了,并且已经执行了 git rm 则可以 git restore --staged newfile.txt 先把暂存区的修改撤销,然后 git restore newfile.txt 在撤销工作区的修改,文件就恢复了。

:从来没有被添加到版本库就被删除的文件,是无法恢复的!

远程仓库

将电脑与 GitHub 建立连接

打开 Git-Bash,运行

1
2
3
4
5
6
git config --global user.name <你的用户名>
git config --global user.email <你的邮箱>

e.g. 用户名和邮箱自己随便写,是用来推送的用户名和邮箱
git config --global user.name Wenqi
git config --global user.email wq.shang.cn@gmail.com

运行 git config -l 检查是否配置成功

接着运行

1
2
3
4
5
6
7
ssh-keygen -t rsa -C <你的邮箱>
# ssh-keygen SSH 密钥生成工具,用来生成一对密钥:公钥和私钥
# -t rsa -t = type,rsa表示使用RSA加密算法
# -C <你的邮箱> -C = comment(注释),通常写邮箱或用户名,这个注释不参与加密,只是标识用途
# 如果只写 ssh-keygen 则后面默认使用RSA加密算法
e.g.
ssh-keygen -t rsa -C wq.shang.cn@gmail.com

一直按 Enter 键就可以了

两个密钥的默认位置在 C:\Users\用户名 文件夹下,需显示隐藏的项目,找到 .ssh 文件夹,里面有两个 id_rsa 文件

id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人


密钥用于此电脑连接至 GitHub

注:如果之前搭梯子生成过密钥,即 .ssh 文件夹,里面已经有两个 id_rsa 文件了,就不用再生成了


密钥生成之后,用 VS Code 打开公钥文件,全选复制里面的内容

登录 GitHub

然后点右上角头像 > Settings > SSH and GPG keys > New SSH key

Title 随便起名,Key Type 默认,Key 的内容为公钥文件里的内容,之后点 Add SSH key

添加远程仓库

登录 GitHub ,创建一个名字为 learngit 的公开仓库,其他设置默认

可以看到 GitHub 的提示

在本地的 learngit 仓库下运行

1
git remote add origin git@github.com:Venqi-S/learngit.git

添加后远程仓库的名字就是 origin

然后运行 git branch -M main 将分支名更改为 main

github中main分支和master分支有什么区别?为什么会出现两种分支_master和main-CSDN博客

最后 git push -u origin main 把本地库的内容推送到远程仓库,实际上是把当前分支 main (改名之前是master)推送到远程

删除(解绑)远程仓库

如果添加远程仓库时地址填写错了,或者不想和远程仓库建立连接了,可以使用 git remote rm <name> 命令

使用前可以使用 git remote -v 检查远程库信息

1
2
3
$ git remote -v
origin git@github.com:Venqi-S/learngit.git (fetch)
origin git@github.com:Venqi-S/learngit.git (push)

然后根据名字删除,如 git remote rm origin 这样就和远程仓库解绑了

从远程仓库克隆

进入一个远程库,找到远程库的地址

在本地新建一个目录,右键鼠标打开 Git-Bash 输入 git clone git@github.com:Venqi-S/learngit.git ,远程库就下载到本地了

自定义 Git

忽略特殊文件

在工作区的根目录下运行 touch .gitignore ,把需要忽略的文件名/文件夹的命写进去

最后也提交到 Git 就完成了

参考链接

  1. Git是什么 - Git教程 - 廖雪峰的官方网站
  2. Git 教程 | 菜鸟教程
  3. git 简明指南