IntelliJ IDEA 使用 Git 超详细教程
Git 是目前最流行的版本控制系统,而 IntelliJ IDEA 作为业界领先的 Java IDE,对 Git 的支持堪称完美,本教程将带你一步步掌握在 IDEA 中高效使用 Git 的技能。

第一部分:准备工作
在开始之前,请确保你已经完成了以下准备工作:
-
安装 Git:
- 访问 Git 官方网站 下载并安装适合你操作系统的 Git。
- 安装完成后,打开终端(Windows 是 CMD 或 PowerShell,macOS/Linux 是 Terminal),输入
git --version检查是否安装成功。
-
配置 Git 用户信息:
- 这一步非常重要,因为每次提交代码都会记录这个信息,在终端中执行以下命令(请替换成你自己的信息):
git config --global user.name "你的名字" git config --global user.email "你的邮箱地址"
- 这一步非常重要,因为每次提交代码都会记录这个信息,在终端中执行以下命令(请替换成你自己的信息):
-
安装 IntelliJ IDEA:
(图片来源网络,侵删)确保你已经安装了 IntelliJ IDEA(Ultimate 版对 Git 的支持更全面,但 Community 版也足够使用)。
第二部分:核心概念与 IDEA 界面
在开始操作前,我们先熟悉一下 IDEA 中与 Git 相关的核心概念和界面。
核心概念回顾
- 工作区:你正在电脑上看到的目录,是你进行代码编辑的地方。
- 暂存区:一个介于工作区和仓库之间的区域,你可以选择将修改的文件“添加”到暂存区,然后再“提交”到仓库。
- 本地仓库:在你电脑上的
.git目录,它完整地记录了所有的版本历史。 - 远程仓库:托管在服务器(如 GitHub, GitLab, Gitee)上的仓库,用于团队协作和备份。
IDEA 中的 Git 界面
IDEA 的 Git 功能主要通过以下几个窗口和工具栏来体现:
-
Git 工具栏:位于主窗口的右下角,是进行 Git 操作最快捷的入口。
Git: 点击可以展开所有可用的 Git 操作。Pull: 从远程仓库拉取最新代码。Commit: 提交本地修改。Push: 将本地提交推送到远程仓库。Rebase: 变基操作。
-
Changes 窗口:这是 Git 的核心工作区。
- Unchanged: 未修改的文件。
- Modified: 已被修改,但未添加到暂存区的文件。
- Staged: 已添加到暂存区,准备提交的文件。
- Locally Added/New: 本地新增的文件。
- Ignored: 被忽略的文件。
-
Log 窗口:查看提交历史。
- 可以看到所有的提交记录、作者、时间、提交信息等。
- 支持图形化展示分支、合并历史。
-
Branches 窗口:管理分支。
- 显示当前所在的分支。
- 可以创建、切换、合并、删除分支。
第三部分:完整工作流详解
我们将通过一个完整的项目生命周期来学习 Git 的使用。
场景设定
- 你正在开发一个新项目
my-awesome-project。 - 项目将托管在 GitHub 上,远程仓库地址为
https://github.com/your-username/my-awesome-project.git。
步骤 1:创建本地仓库
在现有项目中初始化 Git 仓库
- 打开 IDEA,打开你的项目目录
my-awesome-project。 - 如果项目还没有初始化 Git,IDEA 右下角会弹出一个提示,点击 Enable Git。
- 或者,通过菜单栏
File->Settings->Version Control->Git,确保 Git 可执行文件路径正确,然后点击OK。 - 在右下角的 Git 工具栏中,点击
Git->Initialize Repository...。 - 在弹出的对话框中,选择项目根目录,点击
OK。
从远程仓库克隆(Clone)
如果你已经有一个远程仓库(比如在 GitHub 上创建好了),可以直接克隆到本地。
- 在 IDEA 欢迎界面,点击
Get from VCS。 - 或者,通过菜单栏
File->New->Project from Version Control...。 - 在弹出的窗口中,选择
Git,然后粘贴你的远程仓库 URL。 - 选择本地存放路径,点击
Clone,IDEA 会自动下载整个项目并打开。
步骤 2:首次提交(Commit)
- 查看状态:打开
Changes窗口,你会看到所有未被 Git 追踪的文件都显示在Unversioned Files列表中。 - 添加文件到暂存区:
- 方式一(推荐):在
Unversioned Files列表中,右键点击项目根目录,选择Add,这会将所有文件添加到暂存区。 - 方式二:你也可以单独选择某个文件或文件夹进行添加。
- 方式一(推荐):在
- 提交:
- 添加后,这些文件会移动到
Staged列表。 - 在下方的 Commit Message 输入框中,填写你的提交信息,
Initial commit: Add project structure。 - 点击右下角的 Commit 按钮。
- 添加后,这些文件会移动到
最佳实践:提交信息应该清晰、简洁,说明本次提交做了什么,使用现在时态,"Add login button" 而不是 "Added login button"。
步骤 3:连接远程仓库并推送(Push)
- 添加远程仓库:
- 点击菜单栏
Git->Manage Remotes...。 - 在弹出的窗口中,点击 号。
- 在
Name中填入origin(这是远程仓库的默认名称)。 - 在
URL中粘贴你的 GitHub 仓库地址。 - 点击
OK。
- 点击菜单栏
- 推送代码到远程:
- 现在回到
Changes窗口,你的本地仓库已经有了一次提交,但远程仓库还是空的。 - 点击右下角的 Push 按钮。
- IDEA 会弹出一个确认窗口,确保
Push to: origin/master是正确的,然后点击 Push。
- 现在回到
你的代码已经成功上传到 GitHub 了!
步骤 4:日常开发流程(修改、提交、推送)
这是最频繁使用的操作循环。
-
修改代码:在 IDEA 中修改任何一个文件,
README.md。 -
查看变更:
- 打开
Changes窗口,你会看到Modified列表中出现了README.md。 - 双击这个文件,IDEA 会打开一个 Diff 视图,左边是旧版本,右边是你当前修改后的版本,差异部分会用高亮标出。
- 打开
-
暂存和提交:
- 右键点击
README.md,选择Stage(或直接勾选文件前的复选框),将其添加到Staged列表。 - 在下方的 Commit Message 输入框中,填写提交信息,
Update README with installation instructions。 - 点击 Commit 按钮。
- 右键点击
-
推送到远程:
- 提交后,你的本地仓库已经有了新的版本,但远程仓库还没有。
- 点击右下角的 Push 按钮,将这次提交同步到 GitHub。
快捷键:熟练使用快捷键能极大提升效率。
Ctrl+K(Windows/Linux) /Cmd+K(macOS): 快速打开提交窗口。Ctrl+T(Windows/Linux) /Cmd+T(macOS): Pull(拉取)。Ctrl+Shift+K(Windows/Linux) /Cmd+Shift+K(macOS): Push(推送)。
步骤 5:从远程仓库更新(Pull)
如果你的同事推送了新的代码,或者你在其他地方修改了代码,你需要先更新本地代码才能继续工作。
- 检查本地状态:在提交或修改前,最好先确保你的代码是最新的。
- 执行 Pull 操作:
- 点击右下角的 Pull 按钮。
- IDEA 会自动从
origin远程仓库拉取master分支的最新代码,并与你的本地代码合并。 - 如果没有冲突,操作会顺利完成,如果有冲突,IDEA 会提示你,我们将在后面讲解如何解决冲突。
最佳实践:在开始新功能开发前,先执行一次 Pull,确保基于最新的代码进行修改。
步骤 6:分支管理
分支是 Git 的强大功能,它允许你在不影响主分支(如 master)的情况下开发新功能或修复 Bug。
-
创建并切换到新分支:
- 点击右下角的 Git 工具栏,选择
Branches...。 - 在弹出的
Git Branches窗口中,点击New Branch...。 - 输入新分支名称,
feature/user-login。 - 勾选
Checkout branch,然后点击OK。 - 你就在新分支上了,所有提交都会在这个分支上进行,而
master分支保持不变。
- 点击右下角的 Git 工具栏,选择
-
在新分支上开发:
- 像往常一样修改代码、提交 (
git commit),这些提交只存在于feature/user-login分支上。
- 像往常一样修改代码、提交 (
-
推送新分支:
- 当你准备分享你的新分支时,点击 Push。
- IDEA 会提示你这是一个新分支,询问是否要创建一个跟踪分支,选择
Push,你的新分支就会被推送到远程仓库。
-
合并分支:
- 当新功能开发完成并测试通过后,需要将其合并回
master分支。 - 切换回
master分支(在Git Branches窗口中双击master)。 - 右键点击
feature/user-login分支,选择Merge into Current。 - IDEA 会打开一个合并提交窗口,填写合并信息(可选),然后点击 Commit。
master分支就包含了新功能的代码。
- 当新功能开发完成并测试通过后,需要将其合并回
-
删除分支:
- 合并完成后,就可以删除这个分支了。
- 在
Git Branches窗口中,右键点击feature/user-login分支,选择Delete Branch...。 - 如果分支已经推送到远程,可以选择
Delete and Remove Remote来同时删除远程分支。
步骤 7:解决合并冲突
当两个人修改了同一个文件的同一行代码时,Git 无法自动决定哪个版本是正确的,就会发生冲突。
-
制造冲突场景:
- 你在本地修改了
README.md的第 10 行,但不要提交。 - 让你的同事(或者你在另一个终端)修改同一个文件的同一行,并推送到远程仓库。
- 你尝试执行
Pull,就会发生冲突。
- 你在本地修改了
-
IDEA 中的冲突提示:
Changes窗口中,冲突的文件会标上红色的感叹号 。- 双击这个文件,打开冲突解决界面。
-
解决冲突:
- IDEA 会用特殊的标记来标出冲突内容:
<<<<<<< HEAD // 这是你的本地版本 你的代码 ======= // 这是远程仓库的版本 同事的代码 >>>>>>> feature/xxx - 你需要手动决定保留哪一部分代码,或者修改成一个新的版本。删除所有的
<<<<<<<, ,>>>>>>>标记。 - 解决完毕后,文件看起来就像一个普通的文件了。
- IDEA 会用特殊的标记来标出冲突内容:
-
标记冲突已解决:
- 在
Changes窗口中,右键点击已解决的文件,选择Mark as Resolved。 - 这个文件会从
Conflicts列表移到Staged列表。 - 像正常一样提交这次合并:
git commit。 git push到远程仓库。
- 在
第四部分:进阶技巧与最佳实践
使用 .gitignore 文件
有些文件不应该被 Git 追踪,比如编译产物 (target/, build/)、IDEA 配置文件 (.idea/)、日志文件等。
- 在项目根目录创建一个名为
.gitignore的文件。 - 在文件中添加需要忽略的规则,可以从 gitignore.io 网站生成针对不同语言和框架的
.gitignore文件。 - 将
.gitignore文件提交到仓库,这样,之后新创建的符合规则的文件就不会再出现在 Git 的追踪列表中了。
使用 Rebase 代替 Merge
Merge 和 Rebase 都可以合并分支,但效果不同。
- Merge:会产生一个“合并提交”,保留完整的分支历史,历史线是分叉的。
- Rebase` (变基):将你的分支的提交“挪到”目标分支的最新提交之后,历史线是线性的,非常整洁。
如何使用 Rebase:
- 在你的功能分支上(如
feature/user-login)。 - 点击右下角
Git->Rebase->Onto...。 - 选择要合并到的目标分支(如
origin/master),点击Rebase。 - 如果没有冲突,变基成功,你的提交历史看起来就像是直接在
master上开发的一样。 - 在功能分支上执行
git push --force(注意:强制推送会覆盖远程历史,请确保只有你一个人在这个分支上工作)。
建议:对于个人开发或小团队,使用 Rebase 可以保持历史整洁,对于公共分支,使用 Merge 更安全。
查看历史和回滚
- 查看历史:打开
Log窗口,可以清晰地看到提交历史,右键点击某个提交,可以进行Revert(撤销此次提交的更改,并创建一个新的提交)或Reset(将 HEAD 指针移动到某个提交,会修改历史)。 - 撤销修改:
- 工作区的修改:在
Changes窗口,右键点击文件,选择Discard。 - 暂存区的修改:右键点击
Staged列表中的文件,选择Unstage。 - 已提交的修改:在
Log窗口,右键点击要撤销的提交,选择Revert,这是最安全的方式。
- 工作区的修改:在
通过这份教程,你应该已经掌握了在 IntelliJ IDEA 中使用 Git 的核心技能:
- 初始化:
Initialize Repository或Clone。 - 基本循环:
Modify->Stage->Commit->Push。 - 保持同步:
Pull。 - 并行开发:
Create Branch->Develop->Merge。 - 处理问题:
Resolve Conflicts。 - 保持整洁:使用
.gitignore和Rebase。
熟能生巧,多加练习,这些操作会成为你的肌肉记忆,IDEA 的图形化界面让 Git 变得直观易用,但理解其背后的原理(工作区、暂存区、本地仓库、远程仓库)至关重要,祝你编码愉快!
