GitHub Desktop 教程:如何下载、安装并不用命令行使用 Git
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 上安装
- 运行下载的 GitHubDesktopSetup 文件。
- 安装程序不会提出任何问题:应用会安装到当前用户的配置目录中,并立即打开。
- 无需管理员权限,应用会自动下载更新。
如果要在企业的电脑上安装,可以使用单独的 MSI 安装包,请在 GitHub Desktop 的官方文档中查找。
在 macOS 上安装
- 解压下载的 zip 压缩包。
- 将 GitHub Desktop 拖入「应用程序」(Applications)文件夹。
- 启动应用,并确认打开这个从互联网下载的程序。
应用提供适用于 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 上的地址。
- 从列表中选择仓库,或粘贴 URL。
- 选择本地文件夹(Local path)。
- 点击 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 命令。
- 取消勾选不想提交的文件。
- 如有需要,在 diff 中点击单独的行将其排除,这就是部分提交,类似
git add -p。 - 在底部的 Summary 中输入简短说明,如有需要可在 Description 中填写详细内容。
- 点击 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 时会弹出一个列出冲突文件的窗口。对每个文件,你可以在外部编辑器中打开,或整体选择某一个版本:你的版本或传入的版本。
在编辑器中,冲突的样子如下:
<<<<<<< HEAD
const limit = 20;
=======
const limit = 50;
>>>>>>> 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 实践中都有详细讲解。
常见问题
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 的内容。