【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 会比较这三个提交,生成一个新的合并提交。

相关推荐
星源~8 小时前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
zhaqonianzhu9 小时前
git gerrit安装钩子
git·gerrit
这是个栗子9 小时前
【问题解决】VSCode终端中看不到Git-Bash
ide·git·vscode
悲伤小伞9 小时前
linux_git的使用
linux·c语言·c++·git
天机️灵韵11 小时前
云效DevOps vs Gitee vs 自建GitLab的技术选型
git·开源项目
荔枝吻17 小时前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
mrbone1118 小时前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab
小哈龙19 小时前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
GISer_Jing1 天前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
高山莫衣1 天前
git rebase多次触发冲突
大数据·git·elasticsearch