5:IDEA中git的使用--git fetch 和 git pull 和解决冲突

1. git fetch 和 pull 的区别

1.1 核心区别

git fetch(只下载,不合并)

  • 动作:它只会把你远端仓库最新的所有提交(Commit)下载到本地的缓存区(即远程追踪分支,如 origin/main),但绝对不会动你当前正在写代码的分支(工作区)。
  • 状态:执行完后,你的本地代码没有任何变化,安全系数极高

git pull(下载 + 自动合并)

  • 动作:它会直接一步到位。先执行 fetch 把远程最新代码拉下来,紧接着立刻自动执行 merge,把你当前所在的本地分支和远程对应的分支进行合并。
  • 状态:你的本地工作区会瞬间被更新。如果远端和本地修改了同一个文件的同一行,此时会直接触发冲突(Conflict),需要你立即解决。

1.2 底层原理

我们可以把 Git 的仓库结构拆解为三个部分:

  • 工作区(Working Directory):你正在修改的局部代码。
  • 本地历史(Local Repository):你已经 commit 但可能还没 push 的记录。
  • 远程追踪分支(Remote Tracking Branches):本地记录的远程分支状态(如 origin/master)。

执行 git fetch 时:

Git 只更新了 远程追踪分支。

java 复制代码
远程仓库 (Remote) ──> [git fetch] ──> 本地远程追踪分支 (origin/master)
                                              │
                                        (到此为止,工作区未受影响)

此时你可以通过 git log log origin/master 来查看远程有哪些新提交,或者通过 git diff origin/master 对比自己和远端代码的差异。

执行 git pull 时:

Git 连续完成了两步:

java 复制代码
远程仓库 (Remote) ──> [1. fetch] ──> 远程追踪分支 ──> [2. merge] ──> 本地当前分支 & 工作区

1.3 怎么合理使用

我们每有一个需求时,就会新创建一个分支进行开发。开发完成后才合并到master上,那么在开发期间git pull和gitfetch怎么合理使用?

场景一:对主干 master ------ 多用 fetch,谨慎 pull

  • 你在写自己的需求,master 是别人合并代码的地方。
  • 合理做法:使用 git fetch origin master。

为什么:它只把别人新合进 master 的代码下载到你本地的临时缓存区(origin/master),完全不影响你当前正在写的代码。你可以安全地用 IDEA 的 Version Control 界面去瞅一眼:"呀,张三昨天下午合了一个大重构,改到了我正在用的公共类。" 做到心中有数。

场景二 :把 master 的新代码同步到你的需求分支 ------ 用 merge 或 rebase

当你用 fetch 看到 master 有了重要更新,决定把这些更新同步进你的 feature-login 分支时:

  • 合理做法:不要直接在当前分支执行 git pull origin master(这容易把本地历史搞乱)。推荐在你的需求分支下执行:
java 复制代码
git fetch origin master
git rebase origin/master  # 或者 git merge origin/master

场景三:对自己的需求分支 ------ 视情况用 pull

  • 如果你是单人开发这个需求:你不需要对自己的分支执行 git pull。因为远程的 feature-login 只由你一个人推上去,本地永远是最新的。

  • 如果是两个人协作开发同一个需求:每天早晨开工,必须在你的需求分支下执行 git pull(推荐 git pull --rebase),把队友昨天写完推上去的代码拉下来。

java 复制代码
git fetch origin:获取远程仓库 所有分支 的更新。

git fetch origin master:只获取远程仓库 master 这一个分支 的更新。

"每日开发工作流"推荐

刚到工位,喝口水,第一件事不是直接写代码,而是刷新一下远程状态:

bash 复制代码
git fetch --all --prune

这会把远程所有分支(包括 master、其他队友的分支)的最新提交记录都抓取到本地。此时打开 IDEA 的 Git 图形提交树,你能清晰地看到整个团队昨天的战果,而你的本地代码依然稳如泰山。

中午或傍晚:顺手同步主干(Fetch + Rebase)

发现 master 往前推进了,为了防止最后一天提 MR 时冲突太多,主动合一次:

bash 复制代码
git fetch origin master
git rebase origin/master

需求开发完毕,准备合并前:最后总攻(Pull)

代码写完了,准备在 GitLab/GitHub 上提 Merge Request 之前,做最后一次对齐:

1.切换到本地 master 并拉到最新:

java 复制代码
git checkout master
git pull

2.切回需求分支,把最新 master 顶在最下面:

java 复制代码
git checkout feature-login
git rebase master
  1. 确保本地编译、测试全过,放心推送到远端,提 MR。

2.冲突解决

https://blog.csdn.net/qq_42108331/article/details/142671882

相关推荐
Elastic 中国社区官方博客8 小时前
不到 5 分钟完成本地部署:Jina embedding 模型现已支持本地部署
大数据·人工智能·elasticsearch·搜索引擎·embedding·jina
二进制流水搬运工8 小时前
入职第一天拉了23个仓库,我写了个脚本解放双手
大数据·elasticsearch·搜索引擎
Elasticsearch9 小时前
在不到一小时内将 Datadog Kubernetes 仪表板迁移到 Elastic Observability
elasticsearch
2401_8534482310 小时前
Git安装流程和基础使用步骤
git·github
.柒宇.10 小时前
Elasticsearch 核心概念与系统架构详解
elasticsearch·系统架构
风行無痕12 小时前
单机Elasticsearch 8.19.18安全升级到9.4.3的过程
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客14 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
大数据·运维·前端·人工智能·elasticsearch·搜索引擎·全文检索
阿拉雷️15 小时前
【搜索实战】Spring Boot 3.3 + AI Agent × Elasticsearch:让AI自动优化搜索策略,查询速度从2秒压到50毫秒
人工智能·spring boot·elasticsearch
Sagittarius_A*16 小时前
Web 安全之 Git 泄露:原理剖析 + CTFHub Log/Stash/Index 全题型解法
git·安全·web安全
lazy H17 小时前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github