# GitHub Desktop 教程：如何下载、安装并不用命令行使用 Git

URL: https://skillaria.top/zh/guides/git/github-desktop-guide

GitHub Desktop 是 GitHub 为 Windows 和 macOS 提供的免费应用，通过按钮完成 Git 的主要操作：克隆、commit、push、pull、分支、合并和解决冲突。可以到官网 desktop.github.com 下载，安装后登录 GitHub 账号即可克隆仓库。

## GitHub Desktop 是什么

GitHub Desktop 是 GitHub 为 Windows 和 macOS 发布的免费开源应用。它在窗口中显示修改过的文件、提交历史和分支，并通过点击按钮执行 Git 的常用命令。应用内置了一份 Git，因此无需单独安装 Git 就能使用。

如果简单回答「git desktop 是什么」：它是专为 GitHub 设计的 Git 图形客户端。它可以一键克隆你的仓库，创建 pull request 并显示检查状态；它也能连接任何通过 HTTPS 访问的远程仓库，例如 GitLab 或自建服务器上的仓库。

GitHub Desktop 适合初学者、设计师、技术文档作者，以及所有需要清晰的「修改、提交、推送」流程的人。有经验的开发者用它直观地查看 diff，并选择性地提交某几行代码；复杂操作则在终端中完成。

## 如何下载 GitHub Desktop

官方下载地址是 desktop.github.com。网站会自动识别你的系统，并提供 Windows 安装程序或 macOS 压缩包。请只从这里或从 GitHub 上 desktop/desktop 仓库的 Releases 页面下载，第三方网站上标注「免费下载」的版本可能夹带任何东西。

官方没有提供 Linux 版本。社区维护的分支（仓库 shiftkey/desktop）提供 .deb、.rpm 和 AppImage 包，但它不是官方构建。在 Linux 上，更方便的做法是使用终端，或编辑器内置的 Git 客户端。

### 在 Windows 上安装

1. 运行下载的 GitHubDesktopSetup 文件。
2. 安装程序不会提出任何问题：应用会安装到当前用户的配置目录中，并立即打开。
3. 无需管理员权限，应用会自动下载更新。

如果要在企业的电脑上安装，可以使用单独的 MSI 安装包，请在 GitHub Desktop 的官方文档中查找。

### 在 macOS 上安装

1. 解压下载的 zip 压缩包。
2. 将 GitHub Desktop 拖入「应用程序」（Applications）文件夹。
3. 启动应用，并确认打开这个从互联网下载的程序。

应用提供适用于 Intel 和 Apple Silicon 处理器的版本，网站通常会自动推荐合适的一个。也可以通过 Homebrew 安装：

```
brew install --cask github
```

## 登录账号与首次设置

首次启动时，GitHub Desktop 会提示你登录 GitHub.com。点击登录按钮后会打开浏览器，在浏览器中确认授权即可。你不需要在应用里输入密码，双因素认证也在浏览器中按常规方式完成。如果使用 GitHub Enterprise 服务器，则有单独的登录选项。

接着，应用会要求你设置 Git 的用户名和邮箱，它们会写入每一次提交。这正是 `git config --global` 设置的 `user.name` 和 `user.email`，所以如果你之前已经配置过 Git，这些信息会自动填入。若希望提交关联到你的 GitHub 个人主页，请填写已添加到账号中的邮箱，或使用 `ID+用户名@users.noreply.github.com` 格式的隐私邮箱。

之后可以在设置中修改这些选项：Windows 在 File → Options 菜单中，macOS 在 GitHub Desktop → Settings 菜单中。同一位置还可以选择从应用中打开的外部编辑器（例如 VS Code）和终端，以及界面主题。

## 克隆仓库

克隆就是下载远程仓库的完整副本，包括全部历史。在 GitHub Desktop 中，菜单为 File → Clone repository。窗口中有三个标签：你在 GitHub.com 上的仓库、GitHub Enterprise 上的仓库，以及 URL 标签页，可以粘贴任何地址，包括 GitLab 上的地址。

1. 从列表中选择仓库，或粘贴 URL。
2. 选择本地文件夹（Local path）。
3. 点击 Clone，等待下载完成。

这与 `git clone` 命令的效果相同。在 GitHub 仓库页面的 Code 按钮菜单中，有一个 Open with GitHub Desktop 选项，它会打开应用并自动填入地址。如果你克隆的是一个没有写入权限的他人仓库，应用在第一次尝试推送修改时会提示你创建 fork。

已有的 Git 项目文件夹可以通过 File → Add local repository 添加；新建仓库则用 File → New repository，可以直接选择 `.gitignore` 模板、许可证，并创建 README。

## 如何在 GitHub Desktop 中 commit

左侧的 Changes 标签列出所有修改过的文件，右侧显示所选文件的 diff：删除的行为红色，新增的行为绿色。文件旁的复选框决定它是否进入本次提交。它相当于暂存区（staging area），也就是 `git add` 命令。

1. 取消勾选不想提交的文件。
2. 如有需要，在 diff 中点击单独的行将其排除，这就是部分提交，类似 `git add -p`。
3. 在底部的 Summary 中输入简短说明，如有需要可在 Description 中填写详细内容。
4. 点击 Commit to <分支名> 按钮。

提交只会在本地创建，还没有发送到服务器。用 GitHub Desktop 做 commit 很适合小而有意义的提交：每次提交包含什么内容一目了然。如果提交有误，提交后底部会立即出现 Undo 按钮，它会撤销最后一次提交，并把修改退回工作目录，前提是尚未推送。

不应进入仓库的文件，可以通过文件的右键菜单排除：忽略选项会把它追加到 `.gitignore` 中。若要撤销尚未提交的修改，同一菜单中有 Discard changes 选项。修改会被删除（在 Windows 和 macOS 上会放入系统回收站），但最好把它当作不可逆的操作。

## Push、pull 和 fetch：与服务器同步

顶部栏的主按钮会根据情况改变名称。在这里，GitHub Desktop push 和 pull 只需一次点击。

| 按钮上的文字 | 会发生什么 | 对应的 Git 命令 |
| --- | --- | --- |

| Publish repository | 本地仓库还不在 GitHub 上：创建远程仓库并推送 | 创建 remote + `git push -u` |

| Publish branch | 分支只存在于本地 | `git push -u origin 分支名` |

| Fetch origin | 检查服务器上是否有新提交 | `git fetch` |

| Pull origin | 服务器上有新提交，取回到本地 | `git pull` |

| Push origin | 有本地提交待发送，推送出去 | `git push` |

按钮旁边会显示带向上和向下箭头的提交数量，表示需要推送多少提交、需要拉取多少提交。应用会在后台定期执行 fetch，因此当同事推送了新内容时，Pull 按钮会自动出现。

如果你的分支与服务器都有新的提交，推送会被拒绝。请先执行 Pull origin：Git 会合并这些修改，如果修改有重叠，就会出现冲突。只有在执行了改写已推送提交的操作（例如 rebase）之后，应用才会提示你强制推送（force push）。

## 分支：创建、切换与 checkout

分支通过顶部栏的 Current branch 下拉菜单管理。菜单中列出本地和远程分支，可以搜索，并有 New branch 按钮。在列表中选择分支，就是 git desktop checkout：应用会把工作目录切换到该分支。如果选择的远程分支在本地还不存在，应用会创建一个跟踪该远程分支的本地分支。

新分支基于当前分支或默认分支创建，如果有选择，应用会询问你。新分支创建后只存在于你的电脑上，因此顶部按钮会变成 Publish branch。重命名和删除分支可以在 Branch 菜单或分支列表的右键菜单中进行；删除时可以勾选同时删除服务器上的分支。

分支工作完成后，Branch 菜单中有 Create pull request 选项：它会在浏览器中打开 GitHub 的创建 pull request 页面。评审和合并则在网站上完成。

## 在 GitHub Desktop 中 merge 与 rebase

要把另一个分支合并进当前分支，在 Current branch 菜单中选择 Choose a branch to merge into <分支名>（Branch 菜单中也有）。应用会预先显示将合并多少提交以及是否会产生冲突。这就是 git desktop merge，即普通的 `git merge`。

同一菜单中还有 Squash and merge，它把分支的所有提交压缩成一个；以及 Rebase current branch，即 git desktop rebase，它把你的提交移到所选分支之上。对于已推送的分支，rebase 之后服务器和本地的历史会不同，此时推送按钮会变成 Force push origin。只在你独自工作的分支上这样做。

在 History 标签页中，你可以拖动提交：拖到另一个分支上（相当于 cherry-pick），拖到另一个提交上（squash），或调整顺序。应用中没有完整的交互式 rebase，要使用全部操作，需要在终端中运行 `git rebase -i`。

## 合并冲突

如果两个分支修改了同一行，在 merge、pull 或 rebase 时会弹出一个列出冲突文件的窗口。对每个文件，你可以在外部编辑器中打开，或整体选择某一个版本：你的版本或传入的版本。

在编辑器中，冲突的样子如下：

```
> feature/pagination
```

保留需要的内容，删除标记并保存文件。当所有文件中的标记都消失后，GitHub Desktop 会把它们标记为已解决，并启用继续合并的按钮，它会创建一个 merge 提交。如果出了问题，可以在同一窗口中点击取消按钮终止合并，这相当于 `git merge --abort`。

## GitHub Desktop 中的 git stash

主窗口中没有单独的「stash」按钮，但功能是有的。当你带着未提交的修改切换到其他分支时，应用会询问如何处理这些修改：保留在当前分支，还是带到新分支。选择「保留」时，修改会被暂存到 stash 中，这就是 GitHub Desktop 中 git stash 的工作方式。

也可以通过修改列表的右键菜单手动暂存（Stash all changes）。回到该分支后，你会在 Changes 标签页底部看到 Stashed changes 一行：可以在那里查看暂存的文件，并恢复（Restore）或删除它们。

限制：GitHub Desktop 每个分支只保存一个 stash。如果需要多个记录，或需要使用 `git stash pop` 指定某一条，或 `git stash apply stash@{1}`，请使用终端。应用可以通过 Repository 菜单在该仓库目录中打开终端。

## GitHub Desktop 中的 Git LFS

Git LFS 把大型二进制文件（视频、PSD、模型）存放在单独的服务器上，仓库中只保留指针文件。GitHub Desktop 支持 LFS：克隆或打开使用了 LFS 的仓库时，它会提示初始化 Git LFS，之后大文件会自动下载和推送。

但在界面中无法指定哪些文件由 LFS 跟踪。这需要在终端中做一次设置，之后 GitHub Desktop 中的 git lfs 就会透明地工作：

```
git lfs install
git lfs track "*.psd"
git add .gitattributes
git commit -m "Track PSD files with Git LFS"
```

注意配额：GitHub 免费账户的 LFS 存储和流量有限制，具体数值请在账户的计费设置中查看。

## Reset、revert 与历史

History 标签页显示当前分支的提交以及每次提交的修改。通过提交的右键菜单可以使用：

- **Revert changes in commit**：创建一个撤销所选提交的新提交。即使提交已推送也是安全的。
- **Create branch from commit** 和 **Create tag**：从历史上的任意位置创建分支或标签。
- **Amend commit**：针对最后一次提交，修改说明或添加文件。
- **Reset to commit**：新版本的应用中提供，把分支回退到所选提交，并保留工作目录中的修改，相当于 `git reset --mixed`。

界面中没有会丢弃修改的 git desktop reset（即 `git reset --hard`），这是有意为之，以免新手丢失工作内容。如果确实需要，请在终端中执行；丢失的提交可以通过 `git reflog` 找回。

## 什么时候更适合命令行

GitHub Desktop 覆盖了日常工作的大部分流程，但很多功能它没有，或使用不便：

- 包含全部操作的交互式 rebase、`git bisect`、`git reflog`、`git worktree`；
- 多条 stash 记录、子模块、精细的 remote 配置；
- 通过 SSH 在服务器上工作，以及在脚本和 CI 中自动化；
- 没有官方版本的 Linux。

此外，面试时问的正是命令，而理解 `fetch`、`merge` 和 `rebase` 各自的作用，在使用图形界面时也很有帮助。务实的做法是：熟练掌握命令行，并在能节省时间的地方使用应用，例如查看 diff、部分提交和解决冲突。在 GitHub Desktop 中，还可以通过 Repository 菜单直接在项目目录中打开终端。

## 总结

GitHub Desktop 是在 Windows 和 macOS 上使用 Git 的简单免费方式：从 desktop.github.com 下载，登录账号，克隆仓库，然后用按钮完成提交、推送、拉取、分支和冲突处理。对于 stash、LFS 和 reset，它的功能有限，复杂操作仍需终端完成。远程仓库、push、pull 以及通过 pull request 协作，在本课程的 Git 实践中都有详细讲解。

## FAQ

**GitHub Desktop 免费吗？**

免费。应用完全免费，并以开源形式发布；只有在需要 GitHub 的付费套餐时才需要付费。

**使用 GitHub Desktop 还需要单独安装 Git 吗？**

不需要，应用内置了自己的 Git。如果你还想在终端中工作，请为你的系统单独安装 Git。

**GitHub Desktop 可以用于 GitLab 或 Bitbucket 吗？**

可以，在 URL 标签页中使用 HTTPS 地址克隆即可。与 pull request 的集成和账号登录只适用于 GitHub。

**GitHub Desktop 有中文界面吗？**

官方界面是英文的。按钮名称简短，并与 Git 命令对应，因此上手不难。

**为什么 GitHub Desktop 看不到文件的修改？**

最常见的原因是文件匹配了 .gitignore 中的规则，或者打开的是另一个仓库文件夹。请在 Current repository 菜单中检查路径，并查看 .gitignore 的内容。


---
Source: Skillaria.Top (https://skillaria.top)
