# 开始使用 Git

通过操作示例方案了解 Git 的基础知识。

你是否曾希望有一台用于代码的时间机器？ Git 正好可以满足你的需要，而且还能为你提供更多！

如果你还不了解 Git：它是一个**版本控制**系统，可帮助跟踪代码的更改。 可以在某个特定时间点保存项目的快照，然后进行试验性更改，而不会给项目带来风险，因为始终可以返回快照。

GitHub 本身是一个围绕 Git 构建的平台，支持你将 Git 项目保存到云中，并与其他开发人员协作处理项目。

虽然 Git 可能比较复杂，但却是能够为开发人员提供必要功能的强大工具。 本文将介绍在日常工作流程中使用 Git 所需的所有工具。

## 先决条件

要学习本教程，需要[安装 Visual Studio Code](https://code.visualstudio.com/download)。

## 使用 GitHub Desktop 学习 Git 基础知识

对于标准的 Git 操作，建议使用 GitHub Desktop，这是一个支持你通过可视化界面而不是书面命令与 Git 交互的应用。 在本部分中，我们将了解如何使用 GitHub Desktop 快速执行最常见的 Git 操作。

### 设置 GitHub Desktop

如果是第一次使用 GitHub Desktop，需要安装它并连接 GitHub 帐户。

1. [下载 GitHub Desktop](https://desktop.github.com/download/)。
2. 打开 GitHub Desktop，然后单击“Sign in to GitHub.com”\*\*\*\* 并授权 GitHub Desktop 访问你的帐户。
3. 返回 GitHub Desktop，单击**完成**。 这会将 GitHub 帐户中的姓名和电子邮件添加到 Git。

### 创建本地存储库

现在，可以通过创建一个存储库\*\*\*\* 来迈出使用 Git 的第一步。 将存储库视为用于跟踪更改和存储历史记录的项目文件夹。 首先，创建本地\*\*\*\* 存储库：

1. 在 GitHub Desktop 中，单击“在本地驱动器上创建新存储库”。
2. 将存储库命名为 `learning-git`。
3. 选择“用README初始化此存储库”以自动创建一个空白文件。

   > \[!TIP] 标准做法是在项目中包括 `README.md` 文件（也称为 README 文件）。 自述文件通常包含信息，帮助他人了解、设置和运行您的项目。
4. 单击“创建存储库”。

### 创建远程存储库

刚创建的本地存储库位于计算机上。 现在，为同一项目创建一个**远程**存储库，该存储库将托管在 GitHub 上。 通过链接远程存储库，可以更轻松地协作处理和备份工作。

1. \*\*
   \*\*在 GitHub Desktop 中，单击“Publish repository”。
2. \*\*
   \*\*在显示的弹出窗口中，再次单击“Publish repository”。
3. \*\*
   \*\*要查看远程存储库，单击“View on GitHub”。

### 设置空间以进行更改

创建存储库后，现在来了解**分支**。 分支本质上是项目的副本，可以在其中测试更改，而不会影响现有工作的稳定性。

存储库是使用 `main` 分支自动创建的，可以将其视为项目的稳定主版本。 例如，在网站的存储库中，`main` 分支对应于访问者可看到的站点。

创建新分支时，将创建一个安全空间来处理新功能，而不会影响主版本。 你和协作者可使用不同的分支同时处理多个功能。

现在创建一个分支来处理存储库中的更改：

1. 在 GitHub Desktop 中，选择 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-git-branch" aria-label="git-branch" role="img"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg>“Current Branch”下拉菜单，然后单击“New Branch”\*\*\*\*\*\*\*\*。
2. 将新分支命名为 `readme-updates`，然后单击“Create Branch\*\*\*\*”。

### 保存项目的快照

要将进度保存到分支，请执行提交\*\*\*\*。 一次提交是指在特定时间点拍摄的项目的快照。 你实际上已完成第一次提交：使用自述文件进行项目初始化时，GitHub Desktop 自动创建了一次初始提交以添加 `README.md` 文件。

每当完成一个工作区块并希望保存时，都应提交。 完成后，无论将来做了多少更改，你总是可以返回到那个时间点。

1. 在 GitHub Desktop 中，单击 **在 Visual Studio Code 中打开**。

2. 在 VS Code 中，将以下文本粘贴到 `README.md` 并保存更改：

   ```markdown copy
   Hello, World!

   This is a demo project for learning how to use Git.
   ```

3. 返回 GitHub Desktop 后会看到刚才对自述文件进行的更新。 在左下角的 GitHub 配置文件图片旁的文本框中键入“更新自述文件”。 这称为提交消息\*\*\*\*，有助于跟踪每次提交中所做的更改。

4. 若要进行提交，请单击“Commit to readme-updates”\*\*\*\*。

### 将更改引入主分支

对分支上所做的更改感到满意后，可将分支发布到远程存储库并创建拉取请求\*\*\*\*。 通过拉取请求可查看一组建议的更改，然后将这些更改从一个分支合并到另一个分支。 在本例中，我们将创建一个拉取请求，以将我们在 `readme-updates` 中所做的更改合并到我们的原始分支 `main` 中。

1. 单击“Publish branch”\*\*\*\*，将 `readme-updates` 分支与更改一起推送到远程存储库。

2. \*\*
   \*\*要查看建议的更改，单击“Preview Pull Request”。

3. 单击**Create Pull Request**。

4. 在显示的 GitHub 窗口中，将拉取请求标题更改为“向自述文件添加消息”，然后在批注框中键入更改的简短说明。

5. 单击“创建拉取请求”\*\*\*\*。

6. 要将更改合并到 `main` 分支，请在页面底部单击“合并拉取请求 \*\*\*\*”。

   > \[!NOTE] 与其他开发人员协作处理项目时，一个标准做法是在合并拉取请求之前让其他人审阅你的拉取请求。

7. 在页面底部附近，单击“删除分支”。 删除已合并到 `main` 的分支有助于保持存储库干净、便于导航。

### 准备进行更多更改

祝贺你合并了你的第一个 Pull Request！ 现在你已成功将更改引入 `main` 分支，接下来需要完成一些步骤以准备下一轮更改：

1. 在 GitHub Desktop 中，如果不在 `main` 分支上，请选择 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-git-branch" aria-label="git-branch" role="img"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg>“Current Branch”下拉菜单，然后单击“main”\*\*\*\*\*\*\*\*。

   大多数时候，在创建新分支前应切换回 `main` 分支，因为新分支是作为当前所选分支的副本创建的。
2. 若要检查远程 `main` 分支是否已发生任何更改，请单击“Fetch origin\*\*\*\*”。
3. 最后，若要使用远程 `main` 分支的更改更新本地 `main` 分支，请单击“Pull origin\*\*\*\*”。

现在你已拥有在项目上设置和使用 Git 所需的所有技能！

## 在命令行上深入了解 Git

GitHub Desktop 旨在解决日常 Git 需求。 随着你作为开发人员的不断成长，你可能会遇到一些不常见的情况：你希望更强地控制 Git 操作或需要使用更复杂的命令。 在这类情况下，需要转换为在命令行上使用编写的 Git 命令。

### 配置您的命令行环境

在开始使用命令行之前，需要设置一些工具。

1. 在 GitHub Desktop 中，按 <kbd>Ctrl</kbd>+<kbd>\`</kbd> 在命令行上打开项目。
2. 如果使用 Windows，[安装 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。 如果是 macOS 和 Linux，将默认安装 Git。
3. [安装 GitHub CLI](https://github.com/cli/cli?tab=readme-ov-file#installation)，之后便可以从命令行快速执行与 GitHub 相关的操作。
4. 若要从 GitHub 向 GitHub CLI 进行身份验证，可运行以下命令：

   ```shell copy
   gh auth login
   ```

   选择使用 **GitHub.com** 进行身份验证，然后按照屏幕上的提示进行操作。
5. 安装 GitHub Copilot 命令行界面 (CLI)，以便可从命令行使用 Copilot。 请参阅“[安装 GitHub Copilot CLI](/zh/copilot/how-tos/set-up/install-copilot-cli)”。

### 试验复杂命令

安装好后，现在来了解如何查找和了解将来可能要用到的命令。 例如，假设你看到有人在线提及 `git blame`，但你不知道其作用。 可通过以下命令尝试让 Copilot 对其进行解释：

```shell copy
gh copilot explain "git blame"
```

Copilot 会告诉我们，`git blame` 提供文件的详细历史记录，并显示文件中的每一行上一次的修改作者和提交信息。 使用以下命令自行尝试：

```shell copy
git blame README.md
```

这是一个非常实用的工具，但正如你所想象的，文件的 blame 信息可能会变得非常冗长。 假设你只对文件中特定行的最新更新感兴趣。 可以请求 Copilot 为您构建合适的命令：

```shell copy
gh copilot suggest "Show me the blame for line 1 of README.md"
```

当 Copilot 询问要查找的命令类型时，可使用箭头键选择“git command”\*\*\*\*，然后按 <kbd>Enter</kbd>。 然后 Copilot 会建议以下命令：

```shell copy
git blame -L 1,1 README.md
```

使用箭头键选择“Execute command”\*\*\*\*，然后按 <kbd>Enter</kbd>。 随即会显示上次修改 `README.md` 第 1 行的作者和提交信息。

## 审阅和后续步骤

本文通过 GitHub Desktop 介绍了 Git 的基础知识，涵盖了以下重要术语：

* 存储库\*\*\*\*：用于保存对项目中文件所做的所有更改的文件夹。
* ```
            **提交**：特定时间点的项目快照。
  ```
* **分支**：项目的一份副本，可以用来处理一组更改。
* ```
            **拉取请求**：将更改从一个分支合并到另一个分支的请求。
  ```

本文还探讨了如何在命令行上执行更复杂的 Git 操作。 其中尝试了 `gh copilot explain` 和 `gh copilot suggest`，以了解和查找新的命令和功能。

现在，请尝试将学到的内容应用于自己的工作。 使用 GitHub Desktop，通过按 <kbd>Ctrl</kbd>+<kbd>O</kbd> (Windows/Linux) 或 <kbd>Command</kbd>+<kbd>O</kbd> (Mac) 将 Git 添加到现有项目，体验版本控制的优势！