快速开始
本节内容,介绍 Git 常用基本命令。
阅读本章节前,务必先阅读《写这个系列的动机》、《Git 的设计》,在接下来捣鼓技术细节时能有个概念上的印象。
另外建议阅读《版本控制系统》、《Git 是什么,为什么适合我们》
安装
在 Git 官网 (https://git-scm.com) 获取安装信息和文件。
Windows 操作系统推荐按默认路径、默认配置安装 (一路“下一步”就好)。
准备
安装 Git 之后,在计算机上创建一个文件夹,然后通过 Git Bash 进入该目录执行一系列命令。
Windows 中可以在文件夹中鼠标右键选择 Git Bash
直接进入该目录。
在本地初始一个 Git 仓库
# 初始化为 Git Repository
git init
添加新文件
创建一个文本文件 README.txt
,编写一点内容,我们把它添加和提交到仓库。
用 git add
命令添加文件:
# 将新的文件纳入 Git
git add README.txt
# 未跟踪区/工作区 → 暂存区
如果文件比较多,可以通过 git add .
命令添加所有文件,谨慎使用。
add:添加
提交版本
添加文件内容后,只是建立了追踪关系,还需要通过 git commit
命令将内容提交到仓库存储。
# 提交内容到仓库,-m 选项是英文 message,提交的消息,方便以后追溯查阅
# -m, --message <message>
git commit -m "第一次进行 Git 提交"
# 提示当前提交的消息
# 其中 `f6d87bf` 是提交的数字摘要 (哈希/HASH),作为时间节点标记,时光穿越时好停靠
# 每次提交的数字摘要都不一样
[main (root-commit) f6d87bf] 第一次进行 Git 提交
1 file changed, 1 insertion(+)
create mode 100644 README.txt
# commit 单词本身有‘以致日后难以更改’的意思
# 暂存区 → 本地仓库
commit:提交
变更之后再次提交版本
接着我们在 README.txt
中再编写点内容保存。
方式一,两步完成,像上面操作步骤一样先添加到‘暂存区’、再提交到‘仓库区’:
git add README.txt
git commit -m "第二次进行 Git 提交"
方式二,一步完成,将有变更的内容直接提交到‘仓库区’:
# -a 选项是英文 all,所有有变更的内容,不包含未跟踪的文件
# -a, --all
git commit -a -m "第二次进行 Git 提交"
🔔 只要是有“增、删、改”等变更操作,并要存档生成快照,必需先执行 add
,然后执行 commit
。
查看状态
查看状态,能知道有哪些变动和接下来要采取哪些操作。
1、每次 Git 命令执行后有相应的信息反馈;
2、通过 git status
命令可以查看当前状态,要习惯性的使用该命令。
‘工作目录’下的状态提示:
git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage) # ✨ Git Bash 附带了相关的操作命令提示
deleted: Bar.txt # 重命名的文件被当作已删除文件
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: Other.txt # deleted → 已删除的文件
modified: README.txt # modified → 已修改的文件
Untracked files: # 未跟踪的文件
(use "git add <file>..." to include in what will be committed)
Baz.txt # 重命名的文件被当作新文件
Foo.txt
进入‘暂存区’后的状态提示:
git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: Bar.txt -> Baz.txt # renamed → 已重命名的文件
new file: Foo.txt # new file → 新的文件
deleted: Other.txt # deleted → 已删除的文件
modified: README.txt # modified → 已修改的文件
进入‘仓库区’后的状态提示:
git commit -m "一些提交信息"
[main f6d87bf] 一些提交信息
Date: Wed Dec 06 00:31:33 2018 +0800
4 files changed, 2 insertions(+), 3 deletions(-)
rename Bar.txt => Baz.txt (100%)
create mode 100644 Foo.txt
delete mode 100644 Other.txt
更多“状态”相关信息参考《检查和比较〈通过 status 命令查看状态〉》章节内容。
status:状态
查看提交历史
可以通过 git log
查看提交历史,历史记录较多时,按空格键翻页,按 q
退出 (Quit)。
可指定最近次数查看 git log -3
:
git log -3
commit 4654f4ff1c275815fa7fc32c62022553f3181920 (HEAD -> main)
Author: xianghongai <[email protected]>
Date: Wed Dec 06 00:35:12 2018 +0800
一些提交信息
commit 6971fd3212a241a815aaf0b5afe2222de03730d5
Author: xianghongai <[email protected]>
Date: Wed Dec 06 00:32:42 2018 +0800
第二次进行 Git 提交
commit f6d87bfea86b111c0d9380e0fe4f3c7cdff4a4a1
Author: xianghongai <[email protected]>
Date: Wed Dec 06 00:31:33 2018 +0800
第一次进行 Git 提交
更多“日志”相关信息参考《检查和比较〈通过 log 命令查看历史日志〉》章节内容。
log,日志
链接远程仓库
至此,我们完成了本地仓库最常用操作 (add, commit, status, log)。
然而,为了数据在不同设备上同步,或者与他人协作,需要有远程的仓库 (Git Server)。
配置 Git 身份标识
配置身份声明,提交数据内容时显示提交者信息。
# 全局设置
git config --global user.name "<你的名字>"
git config --global user.email "<你的邮箱>"
# 单个仓库设置
git config user.name "<你的名字>"
git config user.email "<你的邮箱>"
方式一:全新模式
先在本地初始仓库、添加内容,然后关联:
mkdir Exploring && cd Exploring # 创建并进入一个文件夹 (mkdir: make directory. cd: change directory)
git init -b main # 本地初始仓库,分支命名为 main (-b, --initial-branch <name>)
git add README.txt # 添加内容
git commit -m "初始提交" # 提交内容
git remote add origin https://github.com/xianghongai/Exploring.git # 添加远程源
git push -u origin main # 当前分支与上游分支建立追踪关系 (-u, --set-upstream)
方式二:克隆模式
git clone https://github.com/xianghongai/Exploring.git # 克隆远程仓库
cd Exploring # 进入 Exploring 文件夹
方式三:本地已有仓库
git remote add origin https://github.com/xianghongai/Exploring.git
git branch -M main
git push -u origin main
方式四:导入其它 Git 托管平台仓库
git clone --bare https://git.example.com/your/Exploring.git Exploring
cd Exploring
git remote set-url origin https://github.com/xianghongai/Exploring.git
git push --mirror
方式五:添加一个推送源
一次推送到多个远程仓库,实现备份。
git remote set-url --add origin https://gitee.com/xianghongai/exploring.git
拉取远程仓库内容
当远程仓库有更新内容,拉取到本地仓库。
# 远程仓库 → 本地仓库
git pull
推送本地仓库内容
当本地仓库有更新内容,推送到远程仓库。
# 本地仓库 → 远程仓库
git push
扩展阅读
细粒度的提交
Git 是一套内容寻址文件系统,其内部不是以文件形式存储,而是将所有文件当作一个整体内容进行管理;也就是说,我们可以不用把不同文件多个维度的信息一股脑的提交,当有需要时,可以选择添加文件中一些行或块的内容,进行细粒度的提交。
基础的配置文件
建议所有的 Git 仓库都有一个 README.md
, LICENSE
, .gitignore
文件。
README
,仓库信息相关的说明LICENSE
,版本声明.gitignore
,忽略无需纳入仓库进行跟踪的文件
Markdown
普通文字编写,强烈建议采用 Markdown 标记语言编排,因为:
- 比起原始的文本文档,Markdown 文档能携带朴素的排版信息;
- 比起 Word、冨文本这类所见即所得的排版,Markdown 语言能更直接、更清晰的控制文档层级结构;
- Git 托管服务能直接渲染;
- 不依赖编辑软件,即便用文本文档打开也能编辑;
- 体积小,不占用空间。
缺点:复杂表格需要用到 HTML 语言。
操作姿势总结
没有用 Git,我们是直接编辑文档,然后保存;有了 Git,在我们操作文档之后,需要额外执行一些 Git 命令,只有这样我们才能开启时光机。
到目前为止,我们能够使用 Git 来完成日常的学习和工作了,Git 的应用并不复杂:将一个文件夹,初始为 Git 仓库,这样包含“未跟踪区、工作目录、暂存区、仓库区、临时存储区”等多个空间。
- 新的文件内容,默认在“未跟踪区”;
- 已有文件的内容变更,在 “工作目录” ;
- 通过
add
命令,可以将 “未跟踪区” 和 “工作目录” 中内容加入到 “暂存区” ; - 然后通过
commit
命令,可以将 “暂存区” 中内容提交到 “仓库区” ; - 再然后通过
push
命令,可以将本地 “仓库区” 内容推送到 “远程仓库区” ; - 可以通过
pull
命令,拉取 “远程仓库区” 的更新内容;
最常用的有四个:本地 add
、commit
,远程 pull
、push
。
后面章节将会介绍每类较具体的操作。