Git使用指南

Git是目前世界上最先进的分布式版本控制系统!

1 安装和配置Git

1.1 Linux环境

1
2
3
4
5
6
7
8
# 查看是否安装 git
git

# CentOS 系列
sudo yum install git

# Ubuntu 系列
sudo apt install git

1.2 macOS环境

使用Homebrew可以很方便地安装。

1
2
3
4
5
6
7
8
# 查看 Homebrew 是否安装
brew -v

# 安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装 git
brew install git

1.3 Windows环境

可以先安装一个包管理工具Scoop

1
2
# 安装 git
scoop install git

1.4 配置

由于Git是分布式版本控制系统,所以安装之后还要配置个人信息。

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

2 版本库

版本库又名仓库(Repository),可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪。

2.1 创建版本库

进入文件夹执行git init命令就可以把这个目录变成Git管理的仓库:

1
git init

目录下会自动生成一个.git的目录,这个目录是Git来跟踪管理版本库的,不要乱动。

如果想要把.git目录生成到别的文件夹,可以使用下面的命令指定:

1
git init --separate-git-dir=D:/Develop/GitRecord

实际是生成了一个.git文件里面写入了gitdir: D:/Develop/GitRecord

2.2 添加文件到版本库

假设当前有一个仓库叫做DemoProject,在这个目录下创建文件readme.txt,把文件放入仓库一共需要两步。使用add添加多个文件到仓库,使用commit一次性提交到仓库。

  1. 使用git add把文件添加到仓库

    1
    git add readme.txt
    执行上面的命令,没有任何显示,Unix的哲学是“没有消息就是好消息”,说明添加成功。

  2. 使用git commit把文件提交到仓库

    1
    git commit -m "提交说明"

如果想要把已有目录交给git管理,可以使用git add .将所有文件全部添加到暂存区,然后一次性git commit进行提交。

所有的版本控制系统,都只能跟踪文本文件的改动,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化。另外不要使用Windows自带的记事本编辑任何文本文件。

2.3 Git工作流程

牢记Git分为以下三个核心区域,它们是并列关系,构成了Git的核心工作流。

  • 工作区 (Working Directory / Working Tree):电脑上看到的实际目录,实际开发的地方
  • 暂存区 (Staging Area / Index):一个缓存区,保存了 git add 准备提交的文件快照
  • 版本库 (Local Repository):已经 git commit 的所有历史版本

工作区有一个隐藏目录.git不算工作区,里面存储的是Git的版本库。暂存区(index 文件)虽然物理上位于 .git 目录中,但它不属于版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD

了解了工作区和版本库,对于很多操作就明白实际是做什么了。

  • git add把文件添加进去,实际上就是把文件修改添加到暂存区
  • git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

Git管理的是修改,而不是文件。 每次修改,如果不用git add到暂存区,那就不会加入到commit中。

3 版本管理

3.1 查看信息

git status命令可以让我们时刻掌握仓库当前的状态,比如是否有文件修改(新增、删除都属于修改)。

1
2
3
4
5
6
7
8
9
10
11
git status

On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: readme.txt

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

git diff命令可以知道某个文件具体修改了什么内容。

1
git diff readme.txt

提交修改和提交新文件是一样的,第一步git add,第二步git commit

3.2 版本回退

每一次commit相当于一个版本,使用git log可以查看版本历史记录,加上--pretty=oneline参数可以让显示更清晰。

1
git log [--pretty=oneline]

使用git reset回到指定版本,Git中HEAD表示当前版本,上一个版本是HEAD^,上上一个版本是HEAD^^,更早的版本是HEAD~n,n表示上n个版本,也可以直接指定版本号(不用写全,Git会自动去找)。

1
git reset --hard HEAD^

3.3 撤销修改

3.3.1 未到暂存区

使用git checkout -- file可以丢弃工作区的修改。

1
git checkout -- readme.txt

-- 双破折号非常重要,它告诉 Git后面的参数是一个文件路径,而不是一个分支名。

Git会执行以下操作:

  1. 查找暂存区readme.txt 的版本(找不到会从 HEAD,即最后一次提交中恢复。)
  2. 用这个版本的文件覆盖工作目录中的 readme.txt

本质上这是一个反向的 git add 操作: git add <file> 会将工作目录中的文件快照存入暂存区(index)。 git checkout -- <file> 会将暂存区里的文件快照还原到工作目录,从而丢弃对文件所做的所有本地修改。

3.3.2 已到暂存区

  1. 使用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。
    1
    git reset HEAD readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

  1. 放回工作区后,暂存区是干净的,工作区有所修改,再使用未到暂存区的处理方式git checkout -- file

3.4 删除文件

当删除文件之后,工作区和版本库不一致,有两种选择。

  1. 确实要从版本库删除该文件

和添加文件类似,第一步git rm从暂存区移除,第二步git commit提交。

1
2
3
git rm readme.txt

git commit

先手动删除文件,然后使用git rm <file>和直接使用git rm <file>效果是完全相同的。

  1. 误删文件,想要恢复
1
git checkout -- readme.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

4 远程仓库

4.1 SSH密钥配置

  1. 生成SSH密钥对
1
ssh-keygen -t ed25519 -C "your_email@example.com"

生成在C:.ssh目录下,id_ed25519.pub是公钥,id_ed25519是私钥。

  1. 将公钥添加到 GitHub
    • 打开 C:\Users\你的用户名\.ssh\id_ed25519.pub,复制内容
    • 进入 GitHub → Settings → SSH and GPG keys → 添加新 SSH 密钥
  2. SSH测试连接
1
ssh -T git@github.com

如果看到 Hi 你的用户名! You've successfully authenticated... 说明 SSH 配置成功。

4.2 添加到远程库

  1. 先在Github创建远程仓库,在本地仓库执行以下命令:
    1
    git remote add origin git@github.com:账户名/仓库名.git

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

  1. 使用git remote -v可以检查远程仓库地址:
    1
    git remote -v

如果能显示下列信息,说明远程仓库配置没问题,可以进行推送和拉取了。

1
2
origin  git@github.com:账户名/仓库名.git (fetch)
origin git@github.com:账户名/仓库名.git (push)

4.3 推送到远程库

使用远程库比本地工作流程多一步push,为下面三步:

  1. 把改动放入暂存区

    1
    git add <文件>

  2. 把暂存区改动提交到本地仓库,生成一个新的commit

    1
    git commit -m "说明"

  3. 把本地仓库的commit推送到远程仓库

    1
    git push origin master

注意:如果远程仓库的默认分支是 main,命令里的 master 改成 main 即可。 Github后来把默认主分支改成main了。


每次推送执行git push origin master命令较长,推荐在第一次推送时加上-u参数,除了推送之外,它还会把本地分支 master 与远程分支 origin/master 关联起来。

1
git push -u origin master

与远程分支关联以后就可以简化命令,直接使用push推送,使用pull拉取,Git 就会自动知道本地的 master 对应远程的 origin/master

1
2
git push
git pull

4.4 从远程库克隆

在本地目录运行下面命令即可克隆一个本地库。

1
git clone git@github.com:账户名/仓库名.git

git clone 下来的仓库,Git 会自动创建一个名为 origin 的远程别名,本地分支和远程分支已经自动关联了,一般直接 git push / git pull 就可以,不需要再手动 -u

5 分支管理


Git使用指南
http://example.com/2025/10/29/coding/研发工具/代码管理工具/Git使用指南/
作者
baoduozhu
发布于
2025年10月29日
许可协议