【Git】分支管理

git 分支管理

在 Git 中,分支合并是一个常见的操作,用于将一个分支的更改集成到另一个分支中。合并后会生成一个新的提交记录,这个过程可以通过多种方式实现。下面详细介绍几种常用的合并方法及其命令。

1. 快进合并 (Fast-Forward Merge)

快进合并是最简单的情况,当目标分支的最新提交是你要合并分支的一个祖先时,Git 只需将指针向前移动即可完成合并。这种情况下不会生成新的提交记录

步骤:

  1. 切换到目标分支:

    sh 复制代码
    git checkout main
  2. 合并源分支:

    sh 复制代码
    git merge feature

如果 main 分支的最新提交是 feature 分支的一个祖先 ,那么 Git 会执行快进合并,直接将 main 分支的指针移动到 feature 分支的最新提交位置。

2. 非快进合并 (No Fast-Forward Merge)

如果你希望在合并时强制生成一个新的提交记录 ,即使可以进行快进合并,可以使用 --no-ff 选项。这样可以保留分支的历史记录,方便后续追踪。

步骤:

  1. 切换到目标分支:

    sh 复制代码
    git checkout main
  2. 合并源分支,并生成一个新的提交记录:

    ⚠️注意:使用此命令时,【暂存区域】不能有文件,即所有修改需先提交,否则会执行失败

    sh 复制代码
    git merge --no-ff feature

idea 终端窗口执行时,会自动生成一个新的提交记录,键入 :wq + 回车 即可。

自定义合并提交信息

在使用 git merge --no-ff 命令时,Git 会默认为你生成一条合并提交信息。不过,你也可以在合并时提供自定义的提交信息。要实现这一点,可以使用 --message-m 选项。

示例

假设你有一个 main 分支和一个 dev 分支,你希望将 dev 分支的更改合并到 main 分支,并生成一个新的提交记录,同时提供自定义的提交信息。

  1. 切换到 main 分支:

    sh 复制代码
    git checkout main
  2. 合并 dev 分支,并提供自定义的提交信息:

    sh 复制代码
    git merge --no-ff -m "Merge dev into main with custom message" dev

3. 解决合并冲突

当两个分支都对同一个文件的同一部分进行了修改时,Git 无法自动解决冲突,需要手动解决。

步骤:

  1. 切换到目标分支:

    sh 复制代码
    git checkout main
  2. 尝试合并源分支:

    sh 复制代码
    git merge feature

如果出现冲突,Git 会在冲突文件中标记出冲突的部分。你需要手动编辑这些文件,选择保留或修改冲突的内容。

  1. 解决冲突后,将文件标记为已解决:

    sh 复制代码
    git add <conflicted-file>
  2. 完成合并:

    sh 复制代码
    git commit

4. 拉取并合并远程分支

当你从远程仓库拉取并合并分支时,可以使用 git pull 命令,它实际上是 git fetchgit merge 的组合。

步骤:

  1. 切换到目标分支:

    sh 复制代码
    git checkout main
  2. 拉取并合并远程分支:

    sh 复制代码
    git pull origin feature

5. 三方合并 (Three-Way Merge)

在非快进合并中,Git 会使用三方合并策略。三方合并涉及三个不同的提交:

  • 基础提交 (Base Commit):两个分支的最近共同祖先。
  • 当前分支的最新提交 (HEAD)。
  • 要合并的分支的最新提交。

Git 会比较这三个提交,生成一个新的合并提交。

相关推荐
逸Y 仙X2 小时前
Git常见命令--助力开发
java·大数据·git·java-ee·github·idea
wgslucky3 小时前
pipeline 使用git parameter插件实现动态选择分支构造
git
春天姐姐5 小时前
vue3项目开发总结
前端·vue.js·git
{⌐■_■}12 小时前
【git】工作流实战:从本地仓库到远程仓库,git pull 与git rebase使用讲解,案例解析
git
大溪地C17 小时前
Git 合并冲突解决与状态分析笔记
笔记·git
CsbLanca17 小时前
Git配置个人和公司的提交信息,通过‘目录配置‘
git
娶个名字趴17 小时前
Git企业开发
git
fruge1 天前
git上传 项目 把node_modules也上传至仓库了,在文件.gitignore 中忽略node_modules 依然不行
大数据·git·elasticsearch
_OMG_1 天前
Git 高效同步远程分支与本地分支清理技巧
git
心无旁骛~1 天前
Git笔记汇总,持续更新~
笔记·git