BlockLune's Blog

首页 标签 关于 |

简明 Git 教程

发表于 2024-11-12
更新于 2024-11-27
更新于 7 日内 许可证 CC BY-NC-SA 4.0 gitversion-controlsoftware-engineeringtoolcollaboration

本文是一篇面向初学者的 Git 的教程,也可以当作一篇 Git 基础命令的备忘录。此文也包括了一些关于 GitHub 的信息,但如果您想更深入了解,请阅读《简明 GitHub 教程》

简介

您可能早就听过 Git 和 GitHub,也可能因为它们相似的名字而感到困惑。这两个东西到底是什么?

Git (图片来源于互联网)

GitHub (图片来源于互联网)

简而言之,Git 是一个 版本控制系统(Version Control System, VCS),它允许您创建一个代码仓库,跟踪项目中的变化,并高效地管理文件。GitHub 是一个用于托管远程 Git 仓库的平台,用于协作和共享项目。

在这篇文章中,您将学习 Git 的基本用法。

安装 Git

从官方网站下载 Git:

或者使用您喜欢的包管理器自行安装。例如,使用 apt

sudo apt update
sudo apt install git

基本配置

在开始使用 Git 之前,您应该告诉 Git 您的名字和电子邮件地址。运行以下命令以全局设置您的名字和电子邮件地址:

git config --global user.name "<your_name>"
git config --global user.email "<[email protected]>"

Tip

强烈建议您将 <your_name> 设置为您的 GitHub 用户名,并将 <your_email> 设置为您的 GitHub 无回复 电子邮件地址,格式为 [email protected]。您可以在 这里 找到无回复电子邮件地址(在 主要电子邮件地址 部分下)。

更多信息:

您还可以设置默认编辑器和默认差异(diff)工具。这里我设置为 VS Code。

# 默认编辑器
git config --global core.editor 'code --wait'

# 默认差异工具
git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

# 默认合并工具
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'

更多信息:

获取帮助

要在使用 Git 时获取帮助,请运行:

git help <>
# 或
git <> --help
# 或
man git-<>

例如,如果您想要获取 git add 的帮助,就输入:

git help add

获取 Git 仓库

是时候准备一个 Git 仓库了,有两种选择:

在现有目录中创建一个

要在当前目录中创建一个新的 Git 仓库,请运行:

git init

此命令将创建一个名为 .git 的目录。

从现有的仓库克隆一个

请参阅《简明 GitHub 教程》

Git 项目中的文件状态

Git 中有三个主要状态:已修改已暂存已提交。这将 Git 项目分为三个主要部分:工作目录暂存区Git 目录

您在 工作目录 中修改文件,将它们暂存(使用 git add)到 暂存区,并将它们提交(使用 git commit)到 Git 目录

当提交后,就会产生一条 Commit 记录,您可以把它理解为对您代码仓库的一个 “快照”。

Tip

请不要误解这里所说的 “提交”!这里的所有操作均发生在您的本地 Git 仓库。

更多信息请参阅 《Git - Git 是什么?》

跟踪文件

要将文件添加到您的跟踪列表(或更准确地说,将文件放入 暂存区),请运行:

git add <>/<>

要撤消 git add(取消暂存文件):

  • 使用 git reset
git reset        # 取消暂存所有文件
git reset <>  # 取消暂存特定文件
  • 使用 git restore
git restore --staged <>   # 取消暂存特定文件
git restore --staged :/      # 取消暂存所有文件
  • 使用 git rm
git rm --cached <>

Note

git reset 等同于 git restore --staged :/git reset <文件> 等同于 git restore --staged <文件>。但是 git rm --cached <文件> 是独一无二的。实际上,它意味着从 暂存区 中删除 <文件>,而其他两个命令将 <文件>暂存区 移回 工作目录

检查状态

要检查仓库中文件的状态,请运行:

git status

# 简短版本
git status -s
# 或
git status --short

在简短版本中,每行前面有两列。左列显示 暂存区 的状态。右列显示 工作目录 的状态。例如:

  • ??:未跟踪的文件
  • A:新添加到暂存区的文件
  • M:修改过的文件

检查差异(diff)

# 显示未暂存、未提交的更改
git diff

# 显示所有未提交的更改(包括暂存的更改):
git diff HEAD

# 只显示暂存的更改
git diff --staged
git diff --cached

提交

要提交文件,请运行:

git commit

此命令将打开一个编辑器。您需要在这里编辑您的提交消息。使用以下命令设置默认编辑器:

git config --global core.editor <编辑器路径或命>

或者,您可以使用 -m 选项简化此过程:

git commit -m <提交消>

“哦!我漏掉了一个文件!”如果您遇到这个问题,您可以这样修改:

git commit -m "错误的提交消息"
git add <漏掉的文>
git commit --amend

第二次提交将 替换 第一次提交,就像第一次提交从未发生过一样。

如果您厌倦了使用暂存区(先 git add,然后 git commit),您可以使用 -a 选项:

git commit -a

此命令等同于以下两个命令:

git add <所有已跟踪的修改过的文>
git commit

Note

如果您想编写更好的提交消息,以下链接可能会有所帮助:

要查看提交历史,请运行:

git log
  • -p--patch 标志使日志以补丁方式输出。
  • -<n> 标志限制日志的数量(例如 -2 只显示最近两条日志)。
  • --stat 标志显示简单的统计信息。
  • --pretty 选项提供了多种显示历史的方式。
    • --pretty=oneline 选项使每个提交都显示在一行中
    • --pretty=short
    • --pretty=full
    • --pretty=fuller
  • --graph 标志添加了一些 ASCII 字符,以花哨的方式输出日志。

我为下面的命令添加了 glog 这样一个别名,还挺有用的:

git log --oneline --decorate --graph

暂存更改

有时,您可能希望暂时保存您工作区的更改,但并不希望将其作为 Commit 提交。例如,您已经开始了您的工作,编辑了几个文件,此时您才想起来您忘记使用 git pull 拉取最新的更改。在这些情形下,您可以使用 git stash 命令:

git stash # 保存当前未提交的改动
git stash pop # 恢复最近一次 stash 的改动,并从 stash 列表中移除
git stash clear # 清空 stash 列表

默认情况下,它不会保存未跟踪(未使用 git add)的文件。为了包括这些文件,您可以使用选项 -u

了解更多:

丢弃工作目录中的更改

Caution

在 Git 中,恢复已提交的文件通常很容易,但恢复未提交的文件通常 非常困难

要丢弃工作目录中的更改,请运行:

git checkout -- <>

此命令将放弃自上次提交以来对文件所做的修改,其中 -- 表示以下内容应被视为文件参数,即使它们类似于选项。

如果希望丢弃所有新增(即未跟踪的文件)和更改,请运行:

git reset HEAD --hard

清理未跟踪的文件和/或目录

git clean # 删除 Git 未跟踪的文件
git clean -d # 删除目录
git clean -x # 删除未跟踪的文件,包括 `.gitignore` 和 `.git/info/exclude` 中的忽略文件

优化本地 Git 存储

使用 git gc 命令可以优化本地 Git 仓库的存储:

git gc --aggressive --prune=now
  • --aggressive 选项告诉 Git 尽可能多地优化存储,但可能会花费更多时间。
  • --prune=now 选项告诉 Git 立即删除不再需要的对象。

资源