跳到主要内容

快速开始

本节内容,介绍 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 命令,拉取 “远程仓库区” 的更新内容;

最常用的有四个:本地 addcommit,远程 pullpush

后面章节将会介绍每类较具体的操作。