一文彻底搞懂Git分支合并和查看【云驻计划】

举报
龙哥手记 发表于 2022/03/01 10:44:07 2022/03/01
【摘要】 系列请多多关注

分支操作

创建分支并切换

此时有一个需求需要在新的分支iss53上工作:

 $ git checkout -b iss53  # b表示branch

它是下面两条命令的简写:

 $ git branch iss53
 $ git checkout iss53


### 切换分支

突然有一个紧急问题要解决,需要在原来的master分支进行修复:

 $ git checkout master

在切换到master之前,需要iss53分支保持好一个干净的状态(修改都已提交)。

注意:切换分支Git 会重置你的工作目录。

checkout 中文含义 “检出”,checkout <branch> 检出分支 => 检出指定分支的代码 => 重置工作目录并切换分支。


接下来,你要修复这个紧急问题。 建立一个 hotfix 分支,在该分支上工作直到问题解决:

 $ git checkout -b hotfix
 ​
 # 中间过程在hotfix上修改了代码并提交
 $ echo 'test' > ./hotfix.txt 
 $ git add .
 $ git commit -m 'fixed'


合并分支

 $ git checkout master # 首先切回master分支
 $ git merge hotfix # 把 hotfix 分支合并过来

删除分支

 $ git branch -d hotfix # d表示delete
 ​
 # 然后切回iss53继续工作
 $ git checkout iss53

注意删除分支是在 branch 命令上


多次提交之后合并分支

假设你已经修正了 #53 问题,打算合并到master分支:

 $ git checkout master
 $ git merga iss53

这看似和之前的合并区别不大。此时你的开发历史从一个更早的地方开始分叉开来(diverged)。 因为,master 分支所在提交并不是 iss53 分支所在提交的直接祖先,Git 不得不做一些额外的工作。 出现这种情况的时候,Git 会使用两个分支的末端所指的快照以及这两个分支的公共祖先,做一个简单的三方合并

和之前将分支指针向前推进所不同的是,Git 将此次三方合并的结果做了一个新的快照并且自动创建一个新的提交指向它。 这个被称作一次合并提交,它的特别之处在于他有不止一个父提交。


遇到冲突时的分支合并

如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们,就产生了冲突。

合并过程中出现CONFLICT提升,表示有冲突

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

使用git status查看未合并状态。

任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,看起来像下面这个样子:

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

你需要手动解决冲突,解决了所有文件里的冲突之后,对每个文件使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决

如果你对结果感到满意,并且确定之前有冲突的的文件都已经暂存了,这时你可以输入 git commit 来完成合并提交。

title: Git分支管理-查看分支
date: 2020-11-18 17:43:57
permalink: /pages/a399b3/
categories: 
  - 《Git》学习笔记
tags: 
  - 

Git分支管理-查看分支


查看分支

 $ git branch
   iss53
 * master  # 带星号*表示当前所在分支
   testing

git branch 命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表。

查看每个分支的最后提交

 $ git branch -v
   iss53   93b412c fix javascript issue
 * master  7a98805 Merge branch 'iss53'
   testing 782fd34 test


查看已(未)合并的分支

--merged--no-merged 这两个选项可以查看哪些分支已经合并或未合并到 当前 分支。

 $ git branch --merged # 查看已合并分支列表
   iss53
 * master

上面列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;

 $ git branch --no-merged # 查看未合并的分支列表
   testing

上面显示未合并的分支,尝试使用 git branch -d 命令删除它时会失败:

 $ git branch -d testing
 error: The branch 'testing' is not fully merged.
 If you are sure you want to delete it, run 'git branch -D testing'.

强制删除未合并的分支:

 $ git branch -D testing

查看指定分支的已(未)合并的分支

上面描述的选项 --merged--no-merged 会在没有给定提交或分支名作为参数时, 分别列出已合并或未合并到 当前 分支的分支。

你总是可以提供一个附加的参数来查看其它分支的合并状态而不必检出它们。 例如,尚未合并到 testing 分支的有哪些?

 $ git branch --no-merged testing
   topicA
   featureB
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。