merge and rebase

文章目录

Git Merge 和 Git Rebase 都是用于集成来自不同分支的修改的 Git 命令。

什么是merge

Git Merge 是将一个分支的改动合并到另一个分支的方式。当你执行一个 merge 操作时,如果没有冲突,Git 会自动创建一个新的提交,这个提交有两个父提交,一个是你正在工作的分支的最后一个提交,一个是你要合并进来的分支的最后一个提交。

什么是rebase

同样可以用来集成不同的分支,但它的工作原理与 merge 不同。Rebase 实际上是取出一系列的提交,然后在另一个分支上"重新执行",在你执行 rebase 的过程中,如果运行到有冲突的提交,Git 会暂停 rebase,并允许你解决冲突,你修复冲突后再提交,然后使用 git rebase --continue 命令来继续执行剩下的部分。这将创建一个线性的提交历史。

merge和rebase的区别

Git Merge 保持了历史的所有信息和分支的上下文关系,但这会让提交历史复杂且难以阅读。

Git Rebase 则可以得到一份"干净"的提交历史,所有的更改都像一条线一样递进,但这会改变历史,且一旦你推送你 rebase 过的代码到远程仓库,会给协作者带来麻烦。

对于团队项目,建议在本地使用 Git Rebase 保持简洁的线性历史记录,等到需要推送到远端仓库,或者需要和别人共享的时候再执行一个 Git Merge。

记住一条原则:已经在公有分支的提交,避免对其进行 Rebase 操作。因为 Rebase 会重写提交历史,这对于已经被其他人拉取使用的分支会产生问题。

操作执行

git merge操作

例如,假设我们想要将 feature 分支的更改合并到 master 分支,首先切换到 master 分支:

复制代码
git checkout master

运行 git merge 命令,后面跟上你想要合并 的 分支的名称:

复制代码
git merge feature

git rebase操作

切换到我们想要重新基准的分支,也就是说我们想要移动 feature 分支到 master 分支的末尾

复制代码
git checkout feature

运行 git rebase 命令,后面跟上你想要基于 的 分支的名称:

复制代码
git rebase master

冲突解决

遇到冲突时,Git会暂停合并或者rebase操作,并且会在冲突的文件中插入标准冲突指示符,你可以直接编辑这些文件来解决冲突。

冲突部分会显示如下格式:

复制代码
<<<<<<< HEAD
code on the current branch
=======
code from the other branch (e.g., the branch being merged or rebased)
>>>>>>> branch-name

其中,<<<<<<< HEAD 与 ======= 之间的部分是在当前分支的代码,而 ======= 和 >>>>>>> branch-name 之间的部分是在其他分支上的代码。

解决冲突的步骤
  • 打开冲突文件,找到冲突的地方。

  • 决定保留哪个版本的代码,或者可能需要手动混合两个版本以解决冲突。

  • 删除所有的标记,包括 <<<<<<< , ======= ,和 >>>>>>> 。

  • 保存文件。

  • 使用 git add 命令把已经解决冲突的文件标记为已解决状态:

    复制代码
    git add filename
  • 如果你正在进行合并(merge)操作,你可以接着提交已经解决冲突的合并:

    复制代码
    git commit 
  • 如果你正在进行rebase操作,应该继续进行剩下的rebase流程:

    复制代码
    git rebase --continue
    #  取消rebase
    git rebase --abort
相关推荐
高频因子挖掘机19 小时前
同一交易日出现重复 K 线:去重前先确认时间、来源和粒度
后端·github·api
SL_staff21 小时前
从邮箱传文档到协同流重构:企业文档协作的系统性破局实践
java·开源·github
用户7273744138841 天前
版本锁定实战:从 `git tag` 到 `package-lock.json` 的完整闭环
github
暖心hebbie设计学习1 天前
GitHub 热榜周报(10.19)|5 个把 AI 装回本地的开源项目:多 agent 控制台、本地语音、节点式生成(含技术看点)
人工智能·github
用户别睡觉1 天前
从 0 到 1 开源:基于 FastAPI 和本地大模型打造一个提示词安全网关
github
mr_g1 天前
一个注解搞定 AGI,两个注解搞定 AMI —— SmartCall 让 Java 对接 Asterisk 简单到离谱
github
sbjdhjd1 天前
从签名重放到 Agent Harness:一堂安全课程如何把前端逆向、MCP 与工程约束串起来
网络安全·ai·github·agent·webshell·mcp·harness
逛逛GitHub1 天前
火了两周的 30 万 Star 逆向 GitHub 开源神器,网友都用它来干啥?
github
程序员差不多先生1 天前
Anthropic 用 5 个月重写了 Git:当 AI Agent 把版本控制系统逼到墙角
人工智能·git·elasticsearch·deepseek v4 pro·kimi k3·glm 5.3·qwen3.7 max
leo_厉锵1 天前
GIT习题
git