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

相关推荐
agent8972 小时前
Elasticsearch 慢查询排查:从 Mapping、分片、分页到聚合优化
大数据·elasticsearch·django
星空2 小时前
git指令
大数据·elasticsearch·搜索引擎
偏爱自由 !3 小时前
2:IDEA中git的使用--基础操作
java·git·intellij-idea
青山木15 小时前
快速搭建免费的个人博客网站:Hexo + GitHub Pages + Butterfly 完整指南
git·github
阿拉斯攀登16 小时前
向量数据库选型:Milvus vs Chroma vs Elasticsearch
数据库·elasticsearch·milvus·知识库·rag·个人知识库
江畔柳前堤19 小时前
第16章:docker企业级实战综合项目
运维·git·安全·docker·容器·eureka
偏爱自由 !19 小时前
一(0.1):配置git
java·git·intellij-idea
满天星830357720 小时前
【Git】原理及使用(八) (企业级开发模型)
git