GIT04_分支概述、查看、创建、切换、合并分支、代码冲突如何定位解决

本文详细介绍了Git分支的基础概念,如何查看本地和远程分支,创建新分支hot-fix,切换到该分支进行开发,以及合并hot-fix分支到master以避免影响主线。通过实例演示了处理分支合并冲突的步骤。

①. 分支概述

  • ①. 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git 的master分支并不是一个特殊分支。 它跟其它分支没有区别。 之所以几乎每一个仓库都有master 分支,是因为git init 命令默认创建它,并且大多数人都懒得去改动它。
    在这里插入图片描述
  • ②. 分支的操作
命令名称作用
git branch 分支名创建分支
git branch -v(-r -a)查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

②. 查看分支 git branch -a

  • ①. 列出所有本地分支:git branch(git branch -v)

  • ②. 列出所有远程分支:git branch -r

  • ③. 列出所有本地分支和远程分支:git branch -a
    在这里插入图片描述

③. 创建分支 git branch hot-fix

  • git branch 分支名称
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git branch hot-fix

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git branch -v
  hot-fix d39bee4 delete b.txt
* master  d39bee4 delete b.txt

④. 切换分支 git checkout hot-fix

  • ①. git checkout 分支名称
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
M       a.txt
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (hot-fix)
  • ②. 创建并切换分支: $ git checkout -b mybranch

⑤. 合并分支 git merge hot-fix

  • ①. git merge 分支名

  • ②. 我们在 hot-fix的a.txt文件的最后追加了内容,提交了到本地库,现在切回到了master,在master上进行代码的合并操作

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ cat a.txt
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
第二次版本迭代

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git merge hot-fix
Updating d39bee4..ba6920a
Fast-forward
 a.txt | 1 +
 1 file changed, 1 insertion(+)

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ cat a.txt
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
第二次版本迭代
这是hot-fix分支修改了
  • ③. 有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决
    (注意:如果我们要进行分支的合并,首先我们应该将master分支先合并到自己的分支,将冲突解决,然后再将自己的分支合并到master,这样就不会有问题)
  1. 这里有三个分支,master、hot-fix、TANGZHI
  2. 我们在hot-fix的a.txt文件中修改了内容,在最后一行添加了"这是hot-fix分支修改了"
  3. 我们在TANGZHI的a.txt文件中修改了内容,在最后一行添加了"TANGZHI分支进行了修改"
  4. 切回到主分支,将hot-fix分支合并到master这里不会产生问题,正常合并
  5. 切回到主分支,将TANGZHI分支合并到master产生了冲突,因为我们对同一个文件进行了修改
  6. 手动解决冲突,重新进行提交,注意提交的时候 git commit -m “这个后面不能带有文件名”
$ git branch TANGZHI
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git checkout TANGZHI
Switched to branch 'TANGZHI'
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (TANGZHI)
$ vim a.txt
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (TANGZHI)
$ git commit -am "TANGZHI分支追加了内容"
[TANGZHI fdd1068] TANGZHI分支追加了内容
 1 file changed, 1 insertion(+)
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (TANGZHI)
$ git checkout master
Switched to branch 'master'
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (hot-fix)
$ vi a.txt
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (hot-fix)
$ git commit -am "hot-fix分支冲突问题"
[hot-fix eb0e4ea] hot-fix分支冲突问题
 1 file changed, 1 insertion(+)
Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (hot-fix)
$ git checkout master
Switched to branch 'master'

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git merge hot-fix
Updating ba6920a..eb0e4ea
Fast-forward
 a.txt | 1 +
 1 file changed, 1 insertion(+)

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ cat a.txt
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
第二次版本迭代
这是hot-fix分支修改了
hot-fix分支演示和TANGZHI分支的冲突问题

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git merge TANGZHI
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master|MERGING)
$ git merge TANGZHI
error: Merging is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master|MERGING)
$ git status
On branch master
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:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master|MERGING)
$ cat a.txt
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
第二次版本迭代
这是hot-fix分支修改了
<<<<<<< HEAD
hot-fix分支演示和TANGZHI分支的冲突问题
=======
TANGZHI分支进行了修改
>>>>>>> TANGZHI

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master|MERGING)
$ vi a.txt

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master|MERGING)
$ git status
On branch master
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:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master|MERGING)
# 注意这里不能带文件名字,因为git不能识别是哪个分支下的文件
$ git commit -am  "冲突解决了"
[master 0c17f90] 冲突解决了

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git stauts
git: 'stauts' is not a git command. See 'git --help'.

The most similar command is
        status

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git status
On branch master
nothing to commit, working tree clean

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (master)
$ git checkout TANGZHI
Switched to branch 'TANGZHI'

Administrator@SD-20191128LXMQ MINGW64 /d/gitRepos/repo1 (TANGZHI)
$ cat a.txt
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
hello TANGZHI
第二次版本迭代
这是hot-fix分支修改了
TANGZHI分支进行了修改
### Git 分支合并的简单易懂详解 #### 什么是分支合并? 在版本控制工具 Git 中,分支合并是指将一个分支上的更改应用到另一个分支的过程。通过这种方式可以实现不同开发人员之间的协作以及功能模块的集成。 #### 合并的方式 Git 提供了两种主要的方式来完成分支间的代码同步:`merge` 和 `rebase`。 --- #### Merge 的工作原理 当使用 `git merge` 命令时,Git 将尝试自动创建一个新的提交记录来组合两个分支的历史记录。如果存在冲突,则需要手动解决这些冲突后再完成合并过程。 ```bash # 切换至目标分支(通常是 main 或者 develop) git checkout target_branch_name # 执行合并操作 git merge source_branch_name ``` 对于某些情况下的快速前向合并(Fast-forward),即源分支完全基于当前分支发展而来而没有任何分叉的情况下,不会生成额外的新提交点[^1]。 --- #### Rebase 的作用机制 相比之下,`rebase` 是把一系列提交移动或者复制到另一条线上去。它使得历史更加线性和整洁,因为它实际上重写了提交历史。 以下是具体的操作流程: ```bash # 首先切换回要更新的目标分支 git checkout feature # 开始变基操作 git rebase master ``` 如果有任何文件发生修改冲突的话,系统会暂停下来等待解决问题;一旦解决了所有的冲突之后就可以继续执行剩下的部分: ```bash git add conflicted_file git rebase --continue ``` 需要注意的是,在复杂项目里频繁地做交互式变基可能带来风险,尤其是已经推送到远程仓库中的公共分支不应轻易改变其提交顺序或内容[^4]。 --- #### 解决冲突的方法 无论采用哪种方法进行分支整合都可能出现冲突的情况。此时可以根据提示找到具体的文件位置,并按照以下步骤处理: 1. **查看状态**: 使用 `git status` 查看哪些文件处于冲突状态。 2. **编辑文件**: 打开含有冲突标记 `<`, `=` , `>` 的文件,删除不需要的部分保存退出。 3. **标记已解决**: 对每一个修复好的文档运行下面这条指令告诉 Git 这些地方已经被妥善处置过了。 ```bash git add filename_with_conflict_resolved ``` 4. **最终确认**: - 如果是在做 rebase,那么接着输入 `git rebase --continue`. - 若是普通的 merge 动作则只需完成整个事务:`git commit`. 以上便是完整的解决方案概述[^3]. --- ### 总结 无论是选择简洁直观但可能导致非线性历史记录增加的 `merge` 方法还是追求干净利落却稍显复杂的 `rebase` 方案,都需要开发者依据实际需求权衡取舍。同时也要记得做好前期准备工作比如全局用户名邮箱设置等基础配置项[^2],这样才能更好地利用好这一强大的分布式版本控制系统——Git!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所得皆惊喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值