Git 实战指南:从分支管理到冲突解决

在项目的开发、测试时,高效的分支管理策略能让代码结构更清晰。本文总结了 Git 分支操作的核心逻辑与常见工作流。

一、 分支的创建与流转

Git 的分支本质上是一个指向提交记录的可移动指针。你可以基于任何现有分支创建新分支。

1. 核心流程图

  1. 初始化/克隆:本地默认生成 main 分支。
  2. 创建功能分支:基于 main 创建 clean-main,作为干净的开发基准。
  3. 多级开发:基于 clean-main 创建 new-feature。此时,new-feature 继承了 clean-main 的所有代码。

2. 常用指令

  • 创建并切换git checkout -b <新分支名>
  • 切换分支git checkout <分支名>
  • 基于特定分支创建:确保你当前在“基准分支”上,再执行创建指令。

二、 远程推送(git push)详解

推送代码时,你需要明确“推送到哪(远程仓库别名)”以及“推送什么(本地与远程的对应关系)”。

指令示例 含义解析 适用场景
git push origin main 将本地 main 推送到远程 originmain 最常用的同步方式。
git push my_origin clean-main:main 将本地 clean-main 推送到远程 my_originmain 分支。 跨分支推送,或本地命名与远程不一致时使用。

知识点: originmy_origin 只是远程仓库地址的代号(别名)。你可以通过 git remote -v 查看它们具体指向哪个 URL。


三、 合并与冲突解决

当开发完成后,需要将功能分支(如 new-branch-name)合并回主分支(main)。

1. 合并操作步骤

  1. 回到目标分支git checkout main
  2. 执行合并git merge new-branch-name

2. 什么是合并冲突(Conflict)?

冲突发生在多个分支对同一个文件的同一部分进行了不同的修改。Git 无法自动判断哪个版本是正确的,需要人工介入。

当你执行 git merge 发现冲突时,合并并不会直接“终止”或“失败”,它会进入一种**“中间状态”**,也就是直接进入了这个页面
在这里插入图片描述


2.1. 执行合并时会发生什么?

当你输入 git merge test 且存在冲突时,终端不会弹出图形化的选择框,而是会直接在命令行显示如下信息:

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

关键点:

  • 不会直接退出:Git 已经帮你合并了那些没有冲突的文件,只有冲突的文件被停在了那里。
  • 不会自动选择:Git 不敢替你决定保留 main 还是 new-branch-name 的代码,它把决定权交给了你。
  • 分支状态变化:你会发现你的终端提示符变了,通常会显示类似 (main|merging),提醒你正处于合并中的状态。

2.2. 什么时候执行 git status

答案是:看到上面的冲突提示后,立刻执行。
在这里插入图片描述

执行 git status 后,你会看到类似这样的输出:

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
    both modified:   index.html

这会清晰地告诉你,到底哪几个文件出了问题(即 both modified 的文件)。


2.3. 如何“选择”保留哪份代码?

Git 不会给你弹窗让你点选,它会直接修改你的源代码文件

当你打开 index.html 时,你会发现代码变成了这样:

  • 手动选择:你需要删掉所有的 <<<< ==== >>>> 标记。
  • 决定内容
  • 如果你想要 main 的,就删掉 new-branch-name 的部分。
  • 如果你想要 new-branch-name 的,就删掉 main 的部分。
  • 如果你觉得两个都要,就重新排列它们。
    测试案例中冲突解决如下:在这里插入图片描述

2.4. 解决冲突后的关键步骤

解决冲突不是选完就结束了,你必须走完“三部曲”来告诉 Git 合并完成了:

  1. 保存文件:在编辑器里改好并保存。
  2. 标记解决:执行 git add index.html。这步非常重要,它告诉 Git:“这个文件的冲突我已经搞定了”。
  3. 完成提交:执行 git commit。此时会弹出一个默认的提交信息(类似 “Merge branch…”),直接保存退出即可。

总结流程图
动作 Git 的状态 你的任务
git merge 发现冲突,停止自动合并 查看报错信息
git status 列出所有冲突文件 确认需要手动修改的文件清单
手动编辑 文件中出现 <<<< 标记 删掉标记,合并代码,保存
git add 冲突标记消失,进入暂存区 告诉 Git 该文件已解决
git commit 产生一个新的“合并提交” 结束合并状态,回到正常开发

小贴士:
如果你改乱了,想撤销这次合并回到合并前的样子,可以随时执行:
git merge --abort
这会像时光机一样,让你回到执行 merge 命令之前的状态。

3. 冲突解决流程

  1. 定位文件:使用 git status 查看处于 both modified 状态的文件。
  2. 手动编辑:打开文件,寻找冲突标记:
  • <<<<<<< HEAD:当前分支(如 main)的代码。
  • =======:分割线。
  • >>>>>>> branch_name:要合并进来的代码。
  1. 保存并提交
  • 删除标记,保留最终想要的代码。
  • 执行 git add <文件名> 标记解决。
  • 执行 git commit 完成合并。

四、 开发进阶小贴士

  • 保持 Main 干净:不要直接在 main 上写代码,所有新功能都应在独立分支开发。
  • 选择性合并:如果你只想合并某个特定的提交,而不是整个分支,可以使用 git cherry-pick <commit-id>
  • 定期同步:在自己的分支开发时,定期执行 git merge main(或 git pull origin main),可以提前解决冲突,避免最后合并时压力过大。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐