git 分支管理
在 Git 中,分支合并是一个常见的操作,用于将一个分支的更改集成到另一个分支中。合并后会生成一个新的提交记录,这个过程可以通过多种方式实现。下面详细介绍几种常用的合并方法及其命令。
1. 快进合并 (Fast-Forward Merge)
快进合并是最简单的情况,当目标分支的最新提交是你要合并分支的一个祖先时,Git 只需将指针向前移动即可完成合并。这种情况下不会生成新的提交记录。
步骤:
-
切换到目标分支:
shgit checkout main
-
合并源分支:
shgit merge feature
如果 main
分支的最新提交是 feature
分支的一个祖先 ,那么 Git 会执行快进合并,直接将 main
分支的指针移动到 feature
分支的最新提交位置。
2. 非快进合并 (No Fast-Forward Merge)
如果你希望在合并时强制生成一个新的提交记录 ,即使可以进行快进合并,可以使用 --no-ff
选项。这样可以保留分支的历史记录,方便后续追踪。
步骤:
-
切换到目标分支:
shgit checkout main
-
合并源分支,并生成一个新的提交记录:
⚠️注意:使用此命令时,【暂存区域】不能有文件,即所有修改需先提交,否则会执行失败
shgit merge --no-ff feature
idea 终端窗口执行时,会自动生成一个新的提交记录,键入
:wq + 回车
即可。
自定义合并提交信息
在使用 git merge --no-ff
命令时,Git 会默认为你生成一条合并提交信息。不过,你也可以在合并时提供自定义的提交信息。要实现这一点,可以使用 --message
或 -m
选项。
示例
假设你有一个 main
分支和一个 dev
分支,你希望将 dev
分支的更改合并到 main
分支,并生成一个新的提交记录,同时提供自定义的提交信息。
-
切换到
main
分支:shgit checkout main
-
合并
dev
分支,并提供自定义的提交信息:shgit merge --no-ff -m "Merge dev into main with custom message" dev
3. 解决合并冲突
当两个分支都对同一个文件的同一部分进行了修改时,Git 无法自动解决冲突,需要手动解决。
步骤:
-
切换到目标分支:
shgit checkout main
-
尝试合并源分支:
shgit merge feature
如果出现冲突,Git 会在冲突文件中标记出冲突的部分。你需要手动编辑这些文件,选择保留或修改冲突的内容。
-
解决冲突后,将文件标记为已解决:
shgit add <conflicted-file>
-
完成合并:
shgit commit
4. 拉取并合并远程分支
当你从远程仓库拉取并合并分支时,可以使用 git pull
命令,它实际上是 git fetch
和 git merge
的组合。
步骤:
-
切换到目标分支:
shgit checkout main
-
拉取并合并远程分支:
shgit pull origin feature
5. 三方合并 (Three-Way Merge)
在非快进合并中,Git 会使用三方合并策略。三方合并涉及三个不同的提交:
- 基础提交 (Base Commit):两个分支的最近共同祖先。
- 当前分支的最新提交 (HEAD)。
- 要合并的分支的最新提交。
Git 会比较这三个提交,生成一个新的合并提交。