1.入门
安装 git
1. Linux 安装
# yum 安装
sudo yum install git
# apt-get 安装
sudo apt-get install git
2. Windows 安装
官网下载安装包,进行傻瓜式安装
官网地址:https://git-scm.com/downloads
3. 查看 git
# 查看 git 版本
git --version
# 获取帮助
git help
4. 配置 git
git 涉及到了多人协作,因此需要配置自己的用户信息(用户名和邮箱),让协作者知道你是谁。
# 配置用户名
git config [--global] user.name "Aaron"
# 配置用户邮箱(可以不是真实的)
git config [--global] user.email Aaron@gmail.com
# 查看某个配置信息
git config <key>
git config user.name
# 查看所有配置信息
git config --list
细节:
- 如果使用了 --global 选项,那么该命令将应用到整个 Git 系统
- 项目级别/仓库级别:仅在当前本地库范围内有效。设置时, 要将路径切换到本地库路径
- 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
git 初始化
初始化就是将当前目录(包括子目录)交给 git 托管。
可以将本地目录进行 git 初始化,也可以直接从远程库(如 GitHub)克隆已经被 git 托管的项目,初始化前需要先进行用户信息的配置。
1. 本地库初始化
在需要被托管的目录内,右键进入 git 命令行 git bash here
$ git init
Initialized empty Git repository in ...
初始化时在目标文件夹下创建了一个 .git
的隐藏目录,该目录就是版本库。
2. 克隆远程库
详见:3.远程库
# 就是远程库的地址,支持多种协议
git clone url
暂存与提交
1. add 暂存
git add
命令将工作区中文件的“新建/修改”添加到暂存区。可以用它开始跟踪新文件,或者把已跟踪的文件的更改放到暂存区。
# .代表所有文件,将所有的更改一次性全部添加到暂存区
$ git add .
# 可以仅将指定的文件或目录添加到暂存区
$ git add README
2. commit 提交
git commit
命令将暂存区(git add
后被追踪)的文件,提交到版本库,
$ git commit -m "本次提交的说明信息"
[master 463dc4f] 本次提交的说明信息 # [分支 哈希] commit message
2 files changed, 2 insertions(+) # 2 个文件被修订,增加了 2 行
create mode 100644 README # 创建模式
每一次 commit 操作,都是对项目作一次快照,也就是创建一次版本。
3. 暂存的同时提交
可以将 git add .
和 git commit
何在一起使用
git commit -a "提交信息"
弊端:省掉 add,就不能撤销了
文件状态
1. 文件的生命周期
工作目录下的每一个文件都不外乎这两种状态:已追踪 或 未追踪。

- Untracked(未追踪):新增且未放入暂存区(add)的文件
- Tracked(已追踪) :已跟踪的文件是指那些被纳入了版本控制的文件。
- Staged(放入暂存区):将修改过的文件放入暂存区
- Unmodified(提交修改):将暂存区记录的文件修改提交到库
- Modified(修改文件):已纳入版本管理的文件,再次被修改
PS:克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件
2. Status 查看文件状态
git status
命令可以检查当前文件所处的状态
$ git status
# 紧凑模式的状态信息
$ git status -s
可能出现的状态
- Untracked files:未跟踪的文件
- Changes not staged for commit: 已追踪的文件进行了更新,还未暂存此更新
- Changes to be committed:已 add 的 change 或新文件可以进行 commit
3. 常见状态解析
1)未修改文件,初次使用 status 命令
$ git status
On branch master # 在主线
nothing to commit, working directory clean #工作区很干净,
上面的表明,当前目录下没有出现任何处于未跟踪状态的新文件,该命令还显示了当前所在分支(master),并告诉你这个分支同远程服务器上对应的分支没有偏离。
PS:commit 后,进行 git status,也是这种效果
2)新文件未 add 时使用 status 命令
$ git status
On branch master
Untracked files: # 未跟踪的文件。
(use "git add <file>..." to include in what will be committed)
README # 新建的 README 文件出现在 Untracked files 下面
nothing added to commit but untracked files present (use "git add" totrack)
新增的文件处于未追踪状态 Untracked
3)git add 后的 status 信息
$ git status
On branch master
Changes to be committed: # 以下文件已处于暂存状态
(use "git reset HEAD <file>..." to unstage)
modified: a.txt
new file: b.txt
- new file:该文件为新被追踪的文件,
- modified:之前追踪的文件内容发生了变化已被 git add
4)add 后,再次修改后的 status 信息
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: shit.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in workingdirectory)
modified: shit.md
shit.md 文件同时出现在暂存区和非暂存区。git 只不过暂存了你运行 git add 命令时的版本,如果现在提交,shit.md 的版本是你最后一次运行 git add 命令时的那个版本,而不是你运行 git commit 时,在工作目录中的当前版本。运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来。
撤销操作
撤销一些 git 命令(并非是版本回退)。
1. 重新 commit
用于 git commit 后
提交完了才发现漏掉了几个文件没有提交,或者提交信息写错了,此时,可以运行带有 --amend
选项的提交命令尝试重新提交,具体流程如下:
- commit:提交
- 发现之前的提交有问题
- 修改问题
- 提交信息问题,直接调用--amend,重新填写提交信息
- 操作问题,进行操作(撤销、删改文件、git add 等)
- 调用
git commit --amend
重新提交
$ git commit --amend -m "new message"
$ git commit --amend --no-edit # 直接重新提交,不修改提交信息
2. 取消暂存
用户 git add 后
将暂存区的文件恢复到工作目录,相当于回到上次 git add
前
git reset HEAD 文件名或.
# 强制取消暂存
git reset HEAD 文件名或. --hard
PS:如果这时候工作目录的文件修改过,取消暂存,不会产生覆盖,仅仅是撤销了暂存,当添加 了 --hard
强制取消暂存,就会将工作目录里的修改强制覆盖。
3. 撤销文件的修改
用于 git add 前对文件的修改
撤销文件的修改,指的是将工作目录的文件恢复成上次提交时的状态,对文件所有的修改都将遗失。
git checkout 文件名; # 方式 1
git checkout . ; # 撤销所有文件
git restore 文件名; # 方式 2: 通过版本穿梭
git restore .;
该命令有一点危险,建议在分支里保存好进度。