Merge

  • 1. 无冲突合并
  • 2. 有冲突合并-手动解决
  • 3. git diff in merge
  • 4. 废弃合并
  • 5. 合并策略

merge相关的操作的命令

git checkout master
git merge alternate
# 解决冲突 .....
git add file_1
git commit -m "Add slternate line 5, 6"
git reset --hard HEAD     # before merge commit将工作目录和索引还原到git merge命令前状态
git reset --hard ORIG_HEAD # after merge commit 将工作目录和索引还原到git merge命令前状态
git checkout -m            # 把冲突解决方案搞砸了,想要返回到冲突的原始状态

合并操作:检出目标分支->确保工作区干净->执行合并操作。执行合并操作后,另一个分支不受影响。

1. 无冲突合并

合并不涉及相同文件的相同部分

chenyingying01@cyy merge % git checkout master
Switched to branch 'master'
chenyingying01@cyy merge % git status
On branch master
nothing to commit, working tree clean
chenyingying01@cyy merge % git merge alternate
Merge made by the 'recursive' strategy.file | 1 +1 file changed, 1 insertion(+)
chenyingying01@cyy merge % git log --graph --pretty=oneline --abbrev-commit
*   50fc402 (HEAD -> master) Merge branch 'alternate'
|\
| * 4fb8628 (alternate) Add alternate's line 4
* | 608c235 Another file
|/
* 61570a2 Initial 3 line file
chenyingying01@cyy merge %

2. 有冲突合并-手动解决

合并涉及相同文件的相同部分, merge时会产生冲突。需要手动的去修改冲突,然后在add, commmit。 代码分支合并时必须保证合入后不会影响原有的功能。

chenyingying01@cyy merge % git branchalternate
* master
chenyingying01@cyy merge % cat >> file
Line 5 stuff
Line 6 stuff
chenyingying01@cyy merge % git add file
chenyingying01@cyy merge % git commit -m "Add line 5 and line 6"
[master f0adb70] Add line 5 and line 61 file changed, 2 insertions(+)chenyingying01@cyy merge % git checkout alternate
Switched to branch 'alternate'
chenyingying01@cyy merge % cat >> file
Line 5 alternate stuff
Line 6 alternate stuff
chenyingying01@cyy merge % git diff
diff --git a/file b/file
index 3754bb3..260d21c 100644
--- a/file
+++ b/file
@@ -2,3 +2,5 @@ line 1 stuffline 2 stuffline 3 stuffline 4 alternate stuff
+Line 5 alternate stuff
+Line 6 alternate stuff
chenyingying01@cyy merge % git add file
chenyingying01@cyy merge % git commit -m "Add slternate line 5, 6"
line 1 stuff
[alternate 8de3d40] Add slternate line 5, 61 file changed, 2 insertions(+)chenyingying01@cyy merge % git checkout master
Switched to branch 'master'
chenyingying01@cyy merge % git merge alternate
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
chenyingying01@cyy merge % git diff
diff --cc file
index f1209a9,260d21c..0000000
--- a/file
+++ b/file
@@@ -2,5 -2,5 +2,10 @@@ line 1 stufline 2 stuffline 3 stuffline 4 alternate stuff
++<<<<<<< HEAD+Line 5 stuff+Line 6 stuff
++=======
+ Line 5 alternate stuff
+ Line 6 alternate stuff
++>>>>>>> alternate
chenyingying01@cyy merge % vim file              # 手动解决冲突
chenyingying01@cyy merge % git add file
chenyingying01@cyy merge % git commit
[master b80e372] Create commit 7015896: Merge branch "alternate"
chenyingying01@cyy merge % git log --graph --pretty=oneline --abbrev-commit
*   b80e372 (HEAD -> master) Create commit 7015896: Merge branch "alternate"
|\
| * 8de3d40 (alternate) Add slternate line 5, 6
* | f0adb70 Add line 5 and line 6
* | 50fc402 Merge branch 'alternate'
|\|
| * 4fb8628 Add alternate's line 4
* | 608c235 Another file
|/
* 61570a2 Initial 3 line file
chenyingying01@cyy merge %

3. git diff in merge

在编程的过程中,提倡使用几个单独概念的,定义良好的提交进行merge,而不是等到最后一个大的庞大提交时再merge.
针对有冲突文件,git diff 命令的输出是 git diff HEAD 和git diff MERGE_HEAD 命令的结果的组合。

chenyingying01@cyy conflict % git diff
diff --cc hello
index e63164d,562080a..0000000
--- a/hello
+++ b/hello
@@@ -1,3 -1,3 +1,7 @@@hello
++<<<<<<< HEAD+worlds
++=======
+ world
++>>>>>>> altYay!
chenyingying01@cyy conflict % git diff HEAD
diff --git a/hello b/hello
index e63164d..1f2f61c 100644
--- a/hello
+++ b/hello
@@ -1,3 +1,7 @@hello
+<<<<<<< HEADworlds
+=======
+world
+>>>>>>> altYay!
chenyingying01@cyy conflict % git diff MERGE_HEAD
diff --git a/hello b/hello
index 562080a..1f2f61c 100644
--- a/hello
+++ b/hello
@@ -1,3 +1,7 @@hello
+<<<<<<< HEAD
+worlds
+=======world
+>>>>>>> altYay!

4. 废弃合并

# 1.before merge commit 将工作目录和索引还原到git merge命令前状态
git reset --hard HEAD
# 2.after merge commit 将工作目录和索引还原到git merge命令前状态
# ORIG_HEAD git 把原始分支的HEAD放在ORIG_HEAD中
git reset --hard ORIG_HEAD
# 3.把冲突解决方案搞砸了,想要返回到冲突的原始状态
git checkout -m

5. 合并策略

Git(10)-merge相关推荐

  1. git如何merge github forked repository里的代码更新?

    2019独角兽企业重金招聘Python工程师标准>>> 转自 haojii 发表于2011/08/20 问题是这样的,github里有个项目ruby-gmail,我需要从fork自同 ...

  2. winmerge 保存为html,使用WinMerge作为git的Merge工具

    使用WinMerge作为git的Merge工具 我比较喜欢使用免费的WinMerge作为diff和merge工具,虽然TortoiseGit也自己带了TortoiseGitMerge工具,但是使用起来 ...

  3. git使用merge合并代码没有生效,提示already up to date

    git使用merge合并代码没有生效,提示already up to date. 可以确定两个分支的代码不一致,先切换到主分支,fetch一下,然后pull:在进行合并. git checkout m ...

  4. 图解 Git 基本命令 merge 和 rebase

    Git 基本命令 merge 和 rebase,你真的了解吗? 前言 Git 中的分支合并是一个常见的使用场景. 仓库的 bugfix 分支修复完 bug 之后,要回合到主干分支,这时候两个分支需要合 ...

  5. git 只merge部分_[Skill]俩小时掌握多人开发中git的主要用法

    前言 几个月前看完了git文档,但是在实际开发中对很多git命令的具体影响仍有疑惑,比方说pull.fetch和rebase三个命令和检出位置拎不清. Git - Book​git-scm.com 安 ...

  6. git 的 merge 与 no-ff merge 的不同之处

    文章目录 参考链接 证明 参考链接 分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息.如果要强制禁用Fast forward模 ...

  7. git 的 merge 默认有commit操作

    文章目录 参考文章 merge 举例 参考文章 分支管理策略 merge 每次合并分支的时候,会同时默认操作一次commit. 举例 现在有分支dev与master,创建新的分支git checkou ...

  8. git(10)---GIT对象模型

    GIT对象模型 SHA 所有用来表示项目历史信息的文件,是通过一个40个字符的(40-digit)"对象名"来索引的,对象名看起来像这样: 6ff87c4664981e439762 ...

  9. git 应用 merge

    1.新建一个仓库git init,并提交git commit c0是初始化的节点,c1是第一次提交的快照,指向初始化的快照.分支master指针指向最新的提交c1,星号表示HEAD指针. 2.新建一个 ...

最新文章

  1. 计算机网络人民邮电出版社答案,计算机网络基础 人民邮电 龚娟 第4章习题答案...
  2. 为什么手机垃圾就是治不了?
  3. Nginx安装环境配置
  4. IOS开发基础之团购案例17-xib和UITableView两种方式实现
  5. iOS-Runtime知识点整理
  6. java中file_详细介绍Java中的File类
  7. vue 安装 less_解决旧Vue项目升级less-loader 6.0.0报错
  8. mllib调参 spark_《Spark 官方文档》机器学习库(MLlib)指南
  9. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_10_Thread类的常用方法_设置线程名称...
  10. MFC防止进程重复建立
  11. java架构师之路:JAVA程序员必看的15本书
  12. 打开 IBM Rational Rose Enterprise Edition 报错的处理
  13. 水平居中设置-定宽块状元素
  14. python实现DES加密解密
  15. unity C# 时间换算记录
  16. 现代软件工程 第一章 【概论】练习与讨论 第2题 邓杰
  17. Python Web开发技巧III
  18. Python中文文本分句
  19. vue3.2中ref高效的秘密:依赖收集错级位运算操作(bit/dep.w/dep.n)
  20. java有哪些特点?

热门文章

  1. bbb sd6 无e2 修改
  2. 关闭TCP连接的学问
  3. 在虚拟机上运行vxWorks
  4. python的river安装
  5. 【转】pacs定位线_C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法
  6. 关于C#程序的单元测试
  7. 第十节:基于MVC5+Unity+EF+Log4Net的基础结构搭建
  8. mysql 更新错误1062_mysql 出现1062错误怎么办
  9. CCNA-Cisco-Packet-Tracerchs(思科官网)安装教程以及使用
  10. *【 POJ - 1007 】DNA Sorting(枚举,类似三元组找第二元问题)