Git使用指南
Git是目前世界上最先进的分布式版本控制系统!
1 安装和配置Git
1.1 Linux环境
1  |  | 
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
2git 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一次性提交到仓库。
使用
git add把文件添加到仓库执行上面的命令,没有任何显示,Unix的哲学是“没有消息就是好消息”,说明添加成功。1
git add readme.txt使用
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
11git 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会执行以下操作:
- 查找暂存区中 
readme.txt的版本(找不到会从HEAD,即最后一次提交中恢复。) - 用这个版本的文件覆盖工作目录中的
readme.txt 
本质上这是一个反向的 git add 操作:
git add <file>
会将工作目录中的文件快照存入暂存区(index)。
git checkout -- <file>
会将暂存区里的文件快照还原到工作目录,从而丢弃对文件所做的所有本地修改。
3.3.2 已到暂存区
- 使用命令
git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。1
git reset HEAD readme.txt 
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
- 放回工作区后,暂存区是干净的,工作区有所修改,再使用未到暂存区的处理方式
git checkout -- file。 
3.4 删除文件
当删除文件之后,工作区和版本库不一致,有两种选择。
- 确实要从版本库删除该文件
 
和添加文件类似,第一步git rm从暂存区移除,第二步git commit提交。
1  |  | 
先手动删除文件,然后使用
git rm <file>和直接使用git rm <file>效果是完全相同的。
- 误删文件,想要恢复
 
1  |  | 
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
4 远程仓库
4.1 SSH密钥配置
- 生成SSH密钥对
 
1  |  | 
生成在C:.ssh目录下,id_ed25519.pub是公钥,id_ed25519是私钥。
- 将公钥添加到 GitHub
- 打开 
C:\Users\你的用户名\.ssh\id_ed25519.pub,复制内容 - 进入 GitHub → Settings → SSH and GPG keys → 添加新 SSH 密钥
 
 - 打开 
 - SSH测试连接
 
1  |  | 
如果看到 Hi 你的用户名! You've successfully authenticated... 说明
SSH 配置成功。
4.2 添加到远程库
- 先在Github创建远程仓库,在本地仓库执行以下命令: 
1
git remote add origin git@github.com:账户名/仓库名.git 
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
- 使用
git remote -v可以检查远程仓库地址:1
git remote -v 
如果能显示下列信息,说明远程仓库配置没问题,可以进行推送和拉取了。
1
2origin  git@github.com:账户名/仓库名.git (fetch)
origin  git@github.com:账户名/仓库名.git (push)
4.3 推送到远程库
使用远程库比本地工作流程多一步push,为下面三步:
把改动放入暂存区
1
git add <文件>把暂存区改动提交到本地仓库,生成一个新的commit
1
git commit -m "说明"把本地仓库的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
2git push
git pull
4.4 从远程库克隆
在本地目录运行下面命令即可克隆一个本地库。 1
git clone git@github.com:账户名/仓库名.git
git clone 下来的仓库,Git 会自动创建一个名为
origin
的远程别名,本地分支和远程分支已经自动关联了,一般直接
git push / git pull 就可以,不需要再手动
-u。