IDEA使用Git提交代码(史上最全功能讲解,保姆级)

​​​​​ 1、IDEA工具栏Git菜单的展开选项

一、提交与推送(本地→远程)

1. Commit... (Ctrl+K)

  • 功能:打开提交对话框,提交当前更改到本地仓库

  • 包含操作

    • 选择要提交的文件

    • 输入提交信息

    • 选择提交前操作(如运行测试、检查代码)

  • 使用场景:完成一个逻辑更改后提交到本地历史

2. Push... (Ctrl+Shift+K)

  • 功能:推送本地提交到远程仓库

  • 操作流程

    1. 选择要推送的分支

    2. 选择目标远程仓库

    3. 确认推送内容

  • 使用场景:分享代码、备份、团队协作


二、更新与拉取(远程→本地)

3. Update Project... (Ctrl+T)

  • 功能智能更新项目(JetBrains IDE特有)

  • 实际执行

    • 先执行 git fetch 获取远程最新信息

    • 然后根据配置选择 mergerebase

    • 可能包括依赖更新和其他VCS操作

  • 使用场景:一键同步项目到最新状态

4. Pull...

  • 功能:拉取远程更新并合并到当前分支

  • 等效命令git pull = git fetch + git merge

  • 与Update的区别Update Project更全面,可能包含其他操作

5. Fetch

  • 功能 :只获取远程更新信息,不合并

  • 效果:更新远程分支引用,但不修改工作目录

  • 使用场景:查看远程是否有新提交,暂不合并


三、分支与合并操作

6. Merge...

  • 功能:将其他分支合并到当前分支

  • 操作:选择要合并的分支,解决可能的冲突

  • 使用场景:完成功能开发后合并到主分支

7. Rebase...

  • 功能:变基操作,重新应用提交

  • 效果:创建更线性的提交历史

  • 使用场景:整理本地分支历史,同步主分支更新

8. Branches... (Ctrl+Shift+N)

  • 功能 :打开分支管理面板

  • 包含功能

    • 查看所有本地和远程分支

    • 创建新分支

    • 切换分支

    • 合并、变基分支

    • 删除分支

  • 使用场景:综合管理分支工作流

9. New Branch...

  • 功能:基于当前提交创建新分支

  • 快速操作:输入分支名,立即创建并切换

10. New Tag...

  • 功能:基于当前提交创建标签

  • 使用场景:标记版本号(如v1.0.0、release-2024)


四、重置与历史查看

11. Reset HEAD...

  • 功能:重置当前分支到特定状态

  • 三种模式

    • Soft:保留工作目录和暂存区更改

    • Mixed:保留工作目录更改,重置暂存区(默认)

    • Hard:丢弃所有更改,完全重置

  • 使用场景:撤销提交,回退到历史版本

12. Show Git Log

  • 功能:打开Git历史视图

  • 显示内容

    • 提交历史图(分支、合并关系)

    • 每次提交的详细信息

    • 文件变更列表

  • 使用场景:查看项目历史,定位问题


五、高级与工具集成

13. Patch

  • 功能:创建和应用补丁文件

  • 使用场景:代码分享、代码审查、离线协作

14. Uncommitted Changes

  • 功能:显示所有未提交的更改

  • 使用场景:快速查看待提交内容

15. Current File

  • 功能:显示当前文件在Git中的状态

  • 可能包括:历史、差异、Blame信息

16. GitHub

  • 功能:GitHub集成操作

  • 可能包括:创建PR、查看Issue、管理仓库

17. Manage Remotes...

  • 功能:管理远程仓库配置

  • 操作:添加、删除、修改远程仓库URL

18. Clone...

  • 功能:克隆远程仓库到本地

  • 使用场景:开始新项目或获取现有项目


六、快速操作

19. VCS Operations Popup... (Alt+N)

  • 功能 :打开版本控制快速操作面板

  • 特点

    • 弹出式菜单,不遮挡代码

    • 包含最常用的Git操作

    • 可自定义常用操作

  • 使用场景:快速执行Git操作而不切换上下文


📌 核心工作流快捷键

日常开发循环

text

复制代码
1. 编写代码
2. Ctrl+K     # 提交更改
3. Ctrl+T     # 更新项目(获取远程更新)
4. 解决冲突(如果有)
5. Ctrl+Shift+K # 推送更改

分支管理

text

复制代码
1. Ctrl+Shift+N  # 打开分支管理
2. 创建功能分支
3. 开发完成后切换回主分支
4. 使用 Merge... 或 Rebase... 合并

问题排查

text

复制代码
1. Show Git Log    # 查看历史
2. 定位问题提交
3. Reset HEAD...   # 回退到稳定版本
4. 或创建修复分支

⚠️ 重要注意事项

快捷键差异

  • 不同IDE可能不同:这里是JetBrains系列的默认快捷键

  • 自定义:大多数IDE支持自定义快捷键

  • 记忆技巧

    • K系列:提交相关(K像钥匙Key→提交)

    • T系列:更新相关(T像拉取Pull)

操作安全等级

操作 危险等级 可恢复性 使用建议
Commit 安全 可修改 频繁使用
Push 中等 已共享难修改 确认后使用
Reset Hard 高危 难恢复 备份后使用
Rebase 已推送 高危 破坏协作 避免使用

团队协作规范

  1. 提交前:运行测试,检查代码格式

  2. 推送前:先Pull更新,避免冲突

  3. 合并前:代码审查,确保质量

  4. 主分支:保护设置,禁止直接推送


🎯 最佳实践建议

快捷键使用

  1. 掌握核心:先掌握 Ctrl+K, Ctrl+T, Ctrl+Shift+K

  2. 逐步扩展:再学习分支管理 Ctrl+Shift+N

  3. 效率提升:使用 Alt+N 快速操作面板

工作习惯

  1. 小步提交:每完成一个小功能就 Ctrl+K

  2. 频繁更新:开始工作前 Ctrl+T 同步

  3. 及时推送:每天结束时 Ctrl+Shift+K 备份

  4. 定期整理:使用 Rebase 整理本地历史

团队协作

  1. 统一流程:团队使用相同的Git工作流

  2. 代码审查:重要更改通过PR/MR

  3. 清晰信息:提交信息规范统一

  4. 及时沟通:遇到冲突及时协调

2、在本地(左侧class)文件上右键选择 Git 时弹出的菜单

1. Commit File...

  • 功能:提交当前选中的文件(或目录中的更改)

  • 操作:打开提交对话框,包含:

    • 暂存区文件列表

    • 提交信息输入框

    • 勾选要提交的文件

  • 使用场景:提交特定文件的更改,而不是所有更改

2. + Add (Ctrl+Alt+A)

  • 功能:将文件添加到暂存区(Stage)

  • 操作git add <filename>

  • 使用场景:准备提交文件前,将其标记为待提交

  • 注意 :新增文件需要先 Add 才能提交


二、代码审查与历史

3. Annotate with Git Blame

  • 功能 :显示文件的 逐行注解(每行代码的最后修改信息)

  • 显示内容

    • 每行代码的提交哈希

    • 修改者

    • 修改时间

    • 提交信息

  • 使用场景

    • 追踪代码变更来源

    • 了解谁修改了特定代码

    • 调试时查找引入问题的时间点

4. Show Diff

  • 功能 :显示文件的当前修改(工作目录 vs 暂存区/最新提交)

  • 显示方式:左右对比视图,高亮显示增删改

  • 使用场景:查看自己未提交的更改

5. Compare with Revision...

  • 功能 :与特定版本比较文件差异

  • 操作:选择历史中的某个提交版本

  • 使用场景:查看文件在某个时间点的状态

6. Compare with Branch...

  • 功能 :与其他分支的同一文件比较

  • 使用场景:查看不同分支间的文件差异

7. Show History

  • 功能 :显示文件的完整提交历史

  • 显示内容

    • 所有修改过该文件的提交列表

    • 每次提交的差异

    • 可以恢复到任意历史版本

  • 使用场景

    • 追踪文件变更历程

    • 查找特定变更的提交

8. Show Current Revision

  • 功能:查看文件在当前提交中的状态

  • 使用场景:查看最新提交的文件内容

9. Rollback... (Ctrl+Alt+Z)

  • 功能撤销文件的本地修改

  • 效果:将文件恢复到最近一次提交的状态

  • 注意 :此操作不可撤销,会永久丢弃未提交的更改

  • 使用场景:放弃错误的修改,重新开始


三、远程操作

10. Push... (Ctrl+Shift+K)

  • 功能:推送当前分支到远程仓库

  • 与文件相关的特殊性:从文件右键执行时,推送的是整个分支,不仅仅是该文件

11. Pull...

  • 功能:拉取远程更新并合并到当前分支

12. Fetch

  • 功能:获取远程更新但不合并

  • 使用场景:查看远程是否有新提交,不立即合并


四、分支与合并

13. Merge...

  • 功能:将其他分支合并到当前分支

  • 从文件右键执行时:通常合并整个分支,而不是单个文件

14. Rebase...

  • 功能:变基操作,重新应用提交

15. Branches... (Ctrl+Shift+B)

  • 功能:打开分支管理界面

  • 使用场景:查看、创建、切换、删除分支

16. New Branch...

  • 功能:基于当前提交创建新分支

17. New Tag...

  • 功能:基于当前提交创建标签(如版本号 v1.0.0)

五、高级操作

18. Reset HEAD...

  • 功能:重置当前分支到特定状态

  • 选项

    • Soft:保留工作目录和暂存区更改

    • Mixed:保留工作目录更改,重置暂存区(默认)

    • Hard:丢弃所有更改,完全重置

  • 使用场景:撤销提交,回退到历史状态

19. Stash Changes...

  • 功能暂存当前工作目录的更改

  • 效果:保存未提交的更改,恢复工作目录到干净状态

  • 使用场景:临时切换分支但不想提交半成品

20. Unstash Changes...

  • 功能:恢复之前暂存的更改

  • 使用场景:切换回原来的工作状态

21. Manage Remotes...

  • 功能:管理远程仓库配置

  • 操作:添加、删除、修改远程仓库地址

22. Clone...

  • 功能:克隆仓库到新目录

  • 从文件右键执行时:克隆当前仓库到其他位置


📌 文件级操作实际场景

场景1:查看文件修改历史

text

复制代码
1. 右键文件 → Show History
2. 查看所有相关提交
3. 点击某个提交,查看当时文件内容
4. 如果需要,可复制历史版本内容

场景2:查找问题引入者

text

复制代码
1. 右键文件 → Annotate with Git Blame
2. 定位到问题代码行
3. 查看是谁在什么时间提交的
4. 点击提交哈希查看完整提交信息

场景3:撤销错误修改

text

复制代码
# 方法A:仅撤销单个文件
1. 右键文件 → Rollback...
2. 确认恢复到最后提交状态

# 方法B:比对后选择性撤销
1. 右键文件 → Show Diff
2. 查看具体修改
3. 手动还原不需要的部分

场景4:比较不同版本

text

复制代码
1. 右键文件 → Compare with Revision...
2. 选择历史提交(如上周的版本)
3. 查看文件变化
4. 或 Compare with Branch... 比较分支差异

⚠️ 重要注意事项

文件级操作 vs 仓库级操作

  • 影响范围

    操作 影响范围 示例
    文件右键操作 通常针对单个文件 Rollback、Blame、Show Diff
    仓库右键操作 整个仓库或分支 Push、Pull、Merge、Rebase

Rollback 的风险

  • 不可恢复:Rollback 会永久丢弃未提交的更改

  • 建议先备份:重要的更改先提交或复制备份

  • 替代方案 :使用 git checkout -- <file> 命令恢复

Blame 的正确使用

  • 不要用于指责:Git Blame 是技术工具,不是问责工具

  • 协作理解:用于理解代码演变,而不是追究责任

  • 历史上下文:结合 Show History 查看完整变更背景


🎯 最佳实践建议

日常文件操作

  1. 修改前 :先 Show History 了解文件背景

  2. 修改中 :频繁 Show Diff 检查更改

  3. 提交前Add 特定文件,避免提交不相关内容

  4. 问题排查 :使用 BlameCompare 定位问题

版本控制策略

  1. 原子提交:每个提交只解决一个问题

  2. 清晰信息:提交信息说明修改原因

  3. 及时提交:小步快跑,避免大块提交

  4. 定期同步:每天 Pull 远程更新

团队协作规范

  1. 代码审查:重要修改通过 Pull Request

  2. 历史追溯:使用 Blame 了解代码上下文

  3. 冲突预防:频繁同步,减少合并冲突

  4. 文档更新:代码修改时同步更新文档

3、右键点击提交记录时出现的上下文菜单

一、复制与提交操作

  1. Copy Revision Number

    • 快捷键:Ctrl+Alt+Shift+C

    • 功能:复制该提交的完整哈希值(如 6ae021e5)到剪贴板。

  2. Create Patch...

    • 功能:将当前提交的变更导出为一个 .patch 文件,可用于邮件发送或手动应用。
  3. Cherry-Pick

    • 功能:将选中的提交单独复制到当前分支,不复制整个分支历史。

二、查看与比较

  1. Checkout Revision '6ae021e5'

    • 功能:将工作目录切换到该提交(进入分离头指针状态,即不在任何分支上)。
  2. Show Repository at Revision

    • 功能:打开文件浏览器,查看该提交时仓库的文件状态。
  3. Compare with Local

    • 功能:比较选中提交与当前工作目录(或当前分支)的差异。

三、历史修改与重置

  1. Reset Current Branch to Here...

    • 功能:将当前分支的指针移动到该提交,可选择:

      • Soft:保留工作目录和暂存区的更改。

      • Mixed:保留工作目录更改,重置暂存区(默认)。

      • Hard:丢弃所有更改,完全回退到该提交。

  2. Revert Commit

    • 功能:创建一个新的提交来撤销选中的提交,保留历史记录。
  3. Undo Commit...

    • 功能:撤销最近的一次提交,将更改放回暂存区或工作目录。

四、提交编辑与整理

  1. Edit Commit Message...

    • 快捷键:F2

    • 功能:修改选中提交的提交信息(需要强制推送)。

  2. Fixup...

    • 功能:将当前工作目录的更改合并到选中提交中,并保留原提交信息。
  3. Squash Into...

    • 功能:将选中提交合并到前一个提交中,并允许编辑提交信息。
  4. Drop Commits

    • 功能:删除选中的一个或多个提交(危险操作,会丢失历史)。
  5. Squash Commits...

    • 功能:将多个连续提交合并为一个提交。
  6. Interactively Rebase from Here...

    • 功能:从该提交开始交互式变基,可重新排序、编辑、合并提交。

五、推送与同步

  1. Push All up to Here...

    • 功能:将该提交及其之前的所有提交推送到远程仓库。
  2. Branch 'origin/master'

    • 功能:显示当前远程分支,可切换或合并。

六、分支与标签

  1. New Branch...

    • 功能:基于该提交创建一个新分支。
  2. New Tag...

    • 功能:基于该提交创建一个标签(常用于版本标记)。

七、导航

  1. Go to Child Commit

    • 快捷键:向左箭头

    • 功能:在提交历史图中移动到子提交(较新的提交)。

  2. Go to Parent Commit

    • 快捷键:向右箭头

    • 功能:移动到父提交(较旧的提交)。


使用建议

  • 修改历史(如 SquashDropRebase 仅适用于本地未推送的提交,否则会破坏协作。

  • 强制推送(Force Push 在多人协作中需谨慎使用。

  • Cherry-Pick 适用于移植单个修复或功能到其他分支。

  • Revert 是安全的撤销方式,适合已推送的提交。

4、Git 分支管理界面

一、分支类型与状态

  • Local Branches(本地分支)

    • 存储在本地仓库中的分支,可自由创建、切换和修改
  • Remote Branches(远程分支)

    • 远程仓库(如 origin)中的分支引用,通常以 origin/分支名 形式显示
  • 符号说明

    • master:本地 master 分支

    • origin/master:远程 master 分支

    • > 符号:表示当前已检出的分支(工作目录所在分支)

    • _ 符号(如 one _):可能表示该分支有未推送的提交

    • 对齐关系:本地分支与对应的远程分支对齐显示


二、主要操作功能

1. New Branch(新建分支)
  • 功能:基于当前所在提交创建一个新的本地分支

  • 使用场景:开发新功能、修复 bug 时创建独立分支

  • 操作流程

    1. 点击 New Branch

    2. 输入分支名称(如 feature/new-page

    3. 可选择是否立即切换到该分支(Checkout)

2. Checkout Tag or Revision...(检出标签或特定版本)
  • 功能 :将工作目录切换到某个标签(如 v1.0.0)或特定提交哈希

  • 注意 :切换到标签或特定提交会进入 "分离头指针" 状态(detached HEAD)


三、本地分支区域详解

显示本地分支列表,每个分支可能有以下状态:

master(主分支)
  • 通常是主要开发或发布分支

  • master | origin/master 表示:

    • 左侧:本地 master 分支

    • 右侧:对应的远程跟踪分支 origin/master

  • 如果两者对齐,表示本地与远程同步

one _ 分支
  • 末尾的 _ 符号通常表示:

    • 有未提交的更改,或

    • 有未推送到远程的提交

  • 对应的远程分支 origin/one 显示在右侧

one_one 分支
  • 没有对应的远程分支(右侧只有 >,表示这是当前分支)

  • 可能是纯本地分支,或尚未推送到远程

two 分支
  • 类似 one_one,没有对应的远程分支

四、远程分支区域详解

显示所有远程跟踪分支(从远程仓库获取的分支引用):

origin/master
  • 远程仓库 origin 中的 master 分支的本地引用

  • 每次执行 git fetch 时会更新这些引用

origin/one
  • 远程仓库中的 one 分支
origin/ZHANG_4125-master-patch-68646
  • 可能是一个特定功能分支或补丁分支

  • 命名格式 用户名-分支类型-描述-编号 常见于代码审查或协作场景


五、关键概念说明

1. 分支跟踪关系
  • 跟踪分支:本地分支与远程分支的关联关系

  • 设置跟踪后,git pullgit push 可省略分支名

  • 示例:master 跟踪 origin/mastergit push 自动推送到 origin/master

2. 分支状态指示
  • 同步状态:本地分支与远程分支的位置关系

    • 超前:本地有未推送的提交

    • 落后:远程有未拉取的提交

    • 分叉:本地与远程都有独立提交

  • 当前分支 :工作目录所在的分支(用 > 标记)

3. 常见工作流程

text

复制代码
1. 创建新分支:New Branch → 输入名称 → Checkout
2. 开发完成后:提交更改 → 推送到远程(首次推送需设置上游)
3. 合并分支:切换到 master → 右键选择其他分支 → Merge
4. 同步远程:定期 Fetch 或 Pull 更新远程分支信息

六、实际使用建议

分支管理策略
  1. 主分支保护master 分支通常用于发布,不应直接提交

  2. 功能分支 :每个新功能创建独立分支(如 feature/*

  3. 修复分支 :bug 修复使用 hotfix/*fix/* 前缀

  4. 定期清理:删除已合并的本地和远程分支

操作注意事项
  • 删除远程分支:需谨慎,最好先确认是否有人在使用

  • 强制推送 :避免在共享分支上使用 git push --force

  • 分支命名 :使用有意义的名称,如 feature/user-authhotfix/login-bug

协作场景
  1. 拉取请求/合并请求:在 GitHub/GitLab 上创建

  2. 代码审查 :通过分支进行,如示例中的 ZHANG_4125-* 分支

  3. 冲突解决:在合并前确保本地分支是最新的

5、右键点击 本地主分支 (如 master 分支)时弹出的上下文菜单

1. New Branch from 'master'...

  • 功能 :基于当前选中的 master 分支创建一个新的本地分支

  • 使用场景

    • 开始开发新功能

    • 修复 bug

    • 进行实验性开发

  • 操作细节

    • 新分支的起点是当前 master 分支的最新提交

    • 通常会立即切换到新分支(取决于工具设置)

    • 可以指定分支名称(建议使用描述性名称,如 feature/user-login

  • 示例 :当前在 master 分支,右键选择此选项,输入 feature/add-search,会创建一个从 master 分叉的新分支


2. Show Diff with Working Tree

  • 功能 :比较 master 分支最新提交与当前工作目录的差异

  • 使用场景

    • 查看自上次提交以来工作目录的变更

    • 确认哪些文件已被修改但尚未提交

    • 准备提交前的代码审查

  • 重要说明

    • 此操作不会切换分支,只是在当前状态下进行比较

    • 如果当前不在 master 分支,会比较该分支与工作目录的差异

    • 显示方式通常为文件列表或逐行对比


3. Update

  • 功能 :将本地 master 分支更新到最新的远程状态

  • 具体操作

    • 执行 git fetch 获取远程最新信息

    • 然后执行 git merge origin/mastergit rebase origin/master

    • 注意:具体是合并(merge)还是变基(rebase)取决于工具配置

  • 使用场景

    • 同步远程团队成员的更改

    • 准备合并其他分支前的更新

  • git pull 的区别

    • git pull = git fetch + git merge

    • 此处的 Update 功能类似,但可能提供更多选项


4. Push...

  • 功能 :将本地 master 分支的提交推送到远程仓库

  • 操作细节

    • 点击后会显示推送对话框

    • 可以选择目标远程(通常是 origin

    • 可以选择推送的分支(通常是 master

    • 可以选择是否强制推送(Force Push

  • 使用场景

    • 将本地提交共享给团队成员

    • 上传已完成的功能或修复

  • 注意事项

    • 如果远程有更新的提交,可能需要先执行 Update

    • 强制推送会覆盖远程历史,多人协作时慎用


5. Rename...

  • 功能 :重命名当前的 master 分支

  • 使用场景

    • 团队分支命名规范变更

    • 个人偏好调整

    • 项目结构调整

  • 操作影响

    • 只重命名本地分支

    • 如果需要重命名远程分支,需要额外操作:

      1. 重命名本地分支

      2. 删除远程旧分支

      3. 推送新分支到远程

      4. 设置上游跟踪关系

  • 实际示例

    bash

    复制代码
    # 重命名 master 为 main(本地)
    git branch -m master main
    
    # 推送新的 main 分支到远程
    git push -u origin main
    
    # 删除远程的 master 分支
    git push origin --delete master

📌 常见工作流程示例

场景1:开始新功能开发

  1. 右键 masterNew Branch from 'master'...

  2. 输入分支名 feature/user-profile

  3. 在新分支上开发并提交

  4. 完成后切换回 master

  5. 右键 masterUpdate(确保同步最新)

  6. 合并功能分支到 master

  7. 右键 masterPush...(推送到远程)

场景2:同步团队代码

  1. 右键 masterUpdate(获取并合并远程更新)

  2. 如有冲突,解决后提交

  3. 继续开发或推送自己的更改

场景3:检查本地更改

  1. 在任意分支工作时,想对比与 master 的差异

  2. 右键 masterShow Diff with Working Tree

  3. 查看差异,决定是否要合并或保存


⚠️ 重要注意事项

关于 master/main 分支

  • 很多项目已从 master 更名为 main

  • 如果是 main 分支,操作完全相同

  • 主分支通常受保护,直接推送可能受限

推送权限

  • 如果远程分支有保护规则,可能需要:

    • Pull Request/Merge Request 审批

    • 代码审查

    • CI/CD 检查通过

冲突处理

  • Update 时可能出现合并冲突

  • 需要手动解决冲突后提交

  • 建议频繁更新以减少冲突复杂度

分支策略推荐

  1. 主分支保持稳定master/main 应始终可部署

  2. 功能分支开发:所有新功能在独立分支开发

  3. 定期同步 :每天至少执行一次 Update

  4. 小步提交:频繁提交并推送,避免大块代码堆积

6、右键点击本地非主分支 (如图中的 one 分支)时弹出的上下文菜单

一、分支切换与创建

1. Checkout

  • 功能 :切换到该分支(one

  • 操作git checkout one

  • 使用场景

    • 继续在该分支上开发

    • 查看该分支的代码状态

  • 注意:会更新工作目录为该分支的最新状态

2. New Branch from 'one'...

  • 功能 :基于 one 分支创建一个新分支

  • 示例 :从 one 创建 feature/from-one

  • 使用场景

    • 基于某个功能分支继续开发子功能

    • 创建修复分支而不影响原分支

3. Checkout and Rebase onto 'master'

  • 功能两步操作合一

    1. 切换到 one 分支

    2. one 分支变基到 master 分支上

  • 操作等效

    bash

    复制代码
    git checkout one
    git rebase master
  • 使用场景

    • 快速同步主分支更新到功能分支

    • 保持线性提交历史


二、代码比较

4. Compare with 'master'

  • 功能 :比较 one 分支与 master 分支的差异

  • 显示

    • 所有不同的文件列表

    • 具体代码行差异

  • 使用场景

    • 查看功能分支相对于主分支的变更

    • 准备合并前的代码审查

5. Show Diff with Working Tree

  • 功能 :比较 one 分支与当前工作目录的差异

  • 特殊情况

    • 如果当前就在 one 分支:显示未提交的更改

    • 如果在其他分支:显示 one 分支与该分支工作目录的差异

  • 使用场景

    • 查看本地修改

    • 比较不同分支的代码状态


三、分支合并与变基

6. Rebase 'master' onto 'one'

  • 功能 :将 master 分支的更改变基one 分支

  • 实际是当前分支 变基到 one 分支

  • 操作条件 :当前必须在 master 分支才会显示此选项

  • 效果

    text

    复制代码
    变基前:one ← A ← B ← C (master)
    变基后:one ← master' (包含A,B,C但基于one重新应用)
  • 使用场景:将主分支更新应用到功能分支(但方向与常见用法相反)

7. Merge 'one' into 'master'

  • 功能 :将 one 分支合并master 分支

  • 操作条件 :当前必须在 master 分支

  • 效果

    text

    复制代码
    合并前:master ← X ← Y
            one ← A ← B
    合并后:master ← X ← Y ← M (合并提交,包含A,B)
  • 使用场景:完成功能开发,合并到主分支


四、同步与推送

8. Update

  • 功能 :更新 one 分支的远程跟踪状态

  • 操作

    1. git fetch origin

    2. git merge origin/onegit rebase origin/one

  • 使用场景

    • 同步远程同名分支的更改

    • 如果 one 跟踪 origin/one,则更新该关联

9. Push...

  • 功能 :将 one 分支推送到远程仓库

  • 首次推送:需要设置上游分支

    bash

    复制代码
    git push -u origin one  # -u 设置跟踪关系
  • 使用场景

    • 备份本地分支

    • 分享代码供协作或审查


五、分支管理

10. Rename...

  • 功能 :重命名 one 分支

  • 操作git branch -m one new-name

  • 注意事项

    • 如果已推送远程,需同步重命名:

      1. 重命名本地:git branch -m one new-name

      2. 删除远程旧分支:git push origin --delete one

      3. 推送新分支:git push -u origin new-name

11. Delete

  • 功能 :删除本地 one 分支

  • 保护措施

    • 如果有未合并的提交,可能会警告

    • 如果当前在该分支,通常不能删除

  • 强制删除git branch -D one(大写 D)

  • 使用场景

    • 功能已合并,清理本地分支

    • 放弃实验性分支


📌 实际工作流示例

场景1:功能开发完成,准备合并

text

复制代码
1. 在 one 分支完成开发并提交
2. 切换到 master:右键 master → Checkout
3. 更新 master:右键 master → Update
4. 合并功能:右键 one → Merge 'one' into 'master'
5. 解决可能的冲突
6. 推送:右键 master → Push...
7. 删除功能分支:右键 one → Delete

场景2:同步主分支更新到功能分支

text

复制代码
1. 在 one 分支开发中
2. 发现 master 有重要更新需要同步
3. 右键 one → Checkout and Rebase onto 'master'
4. 或手动:
   - git checkout one
   - git fetch origin
   - git rebase origin/master
5. 解决变基冲突(如果有)
6. 继续开发

场景3:代码审查前查看变更

text

复制代码
1. 在 one 分支完成功能
2. 右键 one → Compare with 'master'
3. 查看所有变更文件
4. 右键具体文件查看行级差异
5. 确认无误后推送分支
6. 创建 Pull Request

⚠️ 重要注意事项

合并 vs 变基的选择

操作 优点 缺点 适用场景
Merge 保留完整历史,操作安全 产生合并提交,历史不线性 公共分支合并,保留上下文
Rebase 历史线性整洁,便于追踪 重写历史,可能破坏协作 本地整理提交,个人分支同步

删除分支的风险

  1. 未合并删除 :使用 Delete 前确保分支已合并

  2. 恢复误删:如果误删,可通过提交哈希恢复:

    bash

    复制代码
    git checkout -b one 6ae021e5  # 使用最后已知的提交哈希

推送冲突处理

  • 如果远程有更新而本地没有:

    1. Update(获取并合并远程更改)

    2. Push

  • 或使用强制推送(慎用,会覆盖他人提交)

分支命名建议

  • 功能分支:feature/描述,如 feature/user-auth

  • 修复分支:fix/问题,如 fix/login-error

  • 发布分支:release/版本,如 release/v1.2.0

  • 热修复:hotfix/紧急问题


🎯 最佳实践总结

  1. 频繁同步 :开发期间定期 Update,减少冲突

  2. 小步提交:每完成一个小功能就提交,便于追踪

  3. 及时清理:合并后删除本地和远程分支

  4. 保护主分支:不直接在主分支开发

  5. 使用Pull Request:合并前进行代码审查

7、右键点击 远程主分支 (如 origin/master)时弹出的上下文菜单

一、分支检出与创建

1. Checkout

  • 功能:创建本地分支并跟踪该远程分支

  • 操作git checkout -b master origin/master

  • 效果

    • 创建本地 master 分支

    • 设置跟踪关系:本地 master 跟踪 origin/master

    • 切换到新创建的 master 分支

  • 使用场景

    • 首次克隆仓库后设置本地分支

    • 恢复被删除的本地分支

    • 切换到远程分支的最新状态

2. New Branch from 'origin/master'...

  • 功能 :基于远程 origin/master 创建新的本地分支(不切换到该分支

  • 操作git branch new-feature origin/master

  • 与 Checkout 的区别

    操作 创建分支 切换分支 设置跟踪
    Checkout
    New Branch from...
  • 使用场景

    • 基于主分支创建功能分支,但保持当前工作状态

    • 并行开始多个新功能开发


二、代码比较

3. Checkout and Rebase onto 'master'

  • 功能两步操作

    1. 创建并切换到基于 origin/master 的本地分支

    2. 将该分支变基到本地 master 分支

  • 前提条件 :本地已有 master 分支

  • 使用场景:快速创建基于远程最新状态的分支并同步本地更改

4. Compare with 'master'

  • 功能 :比较 origin/master 与本地 master 分支的差异

  • 显示内容

    • 文件变更列表

    • 具体代码差异

  • 使用场景

    • 查看远程是否有自己未拉取的更新

    • 确认本地是否落后于远程

    • 准备合并前的差异检查

5. Show Diff with Working Tree

  • 功能 :比较 origin/master当前工作目录的差异

  • 使用场景

    • 查看自己的修改相对于远程主分支的变更

    • 确认哪些是自己的新代码


三、同步与合并操作

6. Rebase 'master' onto 'origin/master'

  • 功能 :将本地 master 分支变基到 origin/master

  • 操作条件 :当前必须在本地 master 分支

  • 操作等效

    bash

    复制代码
    git checkout master
    git fetch origin
    git rebase origin/master
  • 效果

    text

    复制代码
    变基前:
    本地:A ← B ← C (master)
    远程:A ← D ← E (origin/master)
    
    变基后:
    本地:A ← D ← E ← B' ← C' (master)
    (B、C在E之后重新应用)
  • 使用场景:整理本地提交历史,保持线性

7. Merge 'origin/master' into 'master'

  • 功能 :将远程 origin/master 合并到本地 master 分支

  • 操作条件 :当前必须在本地 master 分支

  • 操作等效

    bash

    复制代码
    git checkout master
    git fetch origin
    git merge origin/master
  • 效果:创建合并提交,保留双方的提交历史

  • 使用场景:获取团队更新,保留完整合并记录

8. Pull into 'master' Using Rebase

  • 功能 :使用变基方式拉取远程更新到本地 master

  • 操作等效

    bash

    复制代码
    git checkout master
    git pull --rebase origin master
  • 与 Merge 的区别

    操作 历史效果 提交记录 适用场景
    Merge 保留双方历史,分叉合并 有合并提交 公共分支,团队协作
    Rebase 线性历史,本地提交后移 无合并提交 个人分支,整理历史
  • 使用场景:希望在拉取更新时保持干净的线性历史


📌 实际工作流对比

场景1:同步团队最新代码

text

复制代码
# 方法A:使用合并(保留完整历史)
1. 确保在本地 master 分支
2. 右键 origin/master → Merge 'origin/master' into 'master'
3. 结果:创建合并提交,历史清晰但可能复杂

# 方法B:使用变基(保持线性历史)
1. 确保在本地 master 分支
2. 右键 origin/master → Pull into 'master' Using Rebase
3. 结果:本地提交后移,历史线性整洁

场景2:开始新功能开发

text

复制代码
# 方法A:基于最新远程代码
1. 右键 origin/master → New Branch from 'origin/master'...
2. 输入分支名 feature/new-api
3. 切换到该分支开始开发

# 方法B:基于最新且同步本地
1. 确保本地 master 是最新的
2. 右键 origin/master → Checkout and Rebase onto 'master'
3. 创建基于远程最新且与本地同步的分支

场景3:检查代码状态

text

复制代码
# 查看远程与本地差异
1. 右键 origin/master → Compare with 'master'
2. 查看哪些文件在远程有更新
3. 决定是否需要拉取

# 查看自己的修改
1. 在当前分支开发中
2. 右键 origin/master → Show Diff with Working Tree
3. 查看自己的工作相对于远程主分支的变化

⚠️ 重要注意事项

变基的风险

  1. 历史重写 :变基会改变提交哈希,已推送的提交不要变基

  2. 协作影响:如果多人基于你的分支工作,变基会破坏他们的历史

  3. 恢复困难:变基错误可能导致复杂恢复

合并策略选择

  • 团队协作 :推荐使用 Merge,历史清晰可追溯

  • 个人分支 :可使用 Rebase,保持整洁

  • 发布分支 :绝对使用 Merge,保留所有上下文

冲突处理流程

text

复制代码
# 遇到合并/变基冲突时:
1. 工具会提示冲突文件
2. 手动解决冲突(编辑文件)
3. 标记冲突已解决:
   - git add <file>  # 对于每个解决的文件
4. 继续操作:
   - 合并:git commit  # 提交合并结果
   - 变基:git rebase --continue

远程分支状态管理

bash

复制代码
# 查看远程分支信息
git remote show origin

# 更新远程分支引用(不合并)
git fetch origin

# 删除本地过时的远程分支引用
git remote prune origin

# 查看所有分支关系
git log --oneline --graph --all

🎯 最佳实践建议

日常开发流程

  1. 开始前 :先 Compare with 'master' 查看远程更新

  2. 定期同步 :每天至少一次 MergePull 远程更新

  3. 提交前Show Diff with Working Tree 检查代码

  4. 推送前:确保本地是最新的,避免冲突

分支管理策略

  1. 主分支保护

    • 禁止直接推送到 origin/master

    • 通过 Pull Request 合并

    • 要求代码审查和测试通过

  2. 功能分支

    • 从最新 origin/master 创建

    • 小步频繁提交

    • 及时同步主分支更新

工具使用技巧

  1. 可视化比较:利用 GUI 工具的对比视图,更直观

  2. 批量操作:多个文件冲突时可使用合并工具

  3. 历史查看 :变基前先用 git log 确认提交顺序

注:针对小白的教学,欢迎大佬们指点评论!

相关推荐
艺杯羹13 小时前
Git版本控制深度复盘:从入门到精通的完整指南
git·wpf·版本控制·git学习·git复盘
菩提小狗14 小时前
第7天:信息打点-资产泄漏&CMS识别&Git监控&SVN&DS_Store&备份|【小迪安全】web安全|渗透测试|网络安全-2021
git·安全·svn
Ghost Face...16 小时前
嵌入式Linux开发Git实战:从认证到Gerrit推送
linux·git·elasticsearch
LeoZY_1 天前
开源项目精选: lazygit —— 告别繁琐命令,终端里玩转可视化Git
git·stm32·单片机·mcu·开源·远程工作·gitcode
黎潇lulu1 天前
IDEA的Git使用方法(中文IDEA版)
java·git·intellij-idea
风行無痕1 天前
Git使用 通过Commit号拉取指定版本代码并另存新分支
git
番茄去哪了2 天前
苍穹外卖day03-----菜品管理
java·开发语言·数据库·ide·git·学习·maven
人间打气筒(Ada)2 天前
代码版本控制系统变更
git·svn·云计算·gitlab·ci·cd·代码变更
扶苏10022 天前
推送代码到gitee,弹出身份验证窗口,但是输入gitee账号密码,提示认证失败
git·gitee
画扇落汗2 天前
OpenClaw安装之(一)公司电脑下的企业防火墙的安装避坑指南:彻底解决 `libsignal-node` GitHub 下载失败问题 git 源码安装指南
git·ai·node.js·github·openclaw