1.分支间的合并

1)直接合并:把两个分支上的历史轨迹合二为一(就是所以修改都全部合并)

zhangshuli@zhangshuli-MS-:~/myGit$ vim merge.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
g# On branch thrid
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# merge.txt
nothing added to commit but untracked files present (use "git add" to track)
zhangshuli@zhangshuli-MS-:~/myGit$ git add .
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "merge"
[thrid 6436f0b] merge
files changed, insertions(+), deletions(-)
create mode merge.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 6436f0b6bbe0da18ce65e90dd7ea90cf4008bbe3
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + merge
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ git merge thrid
Merge made by recursive.
merge.txt | +
mysite-1.0.tar.gz | Bin -> bytes
mysite-1.0.zip | Bin -> bytes
files changed, insertions(+), deletions(-)
create mode merge.txt
create mode mysite-1.0.tar.gz
create mode mysite-1.0.zip
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* parent 44d288e Merge branch 'thrid' into parent
son 3a1cbb4 ccc add
thrid 6436f0b merge
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ccc.txt ddd.txt merge.txt mysite-1.0.tar.gz mysite-1.0.zip
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 44d288e4316e47ac9b6e3ee6a4152aceff5d17ce
Merge: e2e09c4 6436f0b
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + Merge branch 'thrid' into parent
zhangshuli@zhangshuli-MS-:~/myGit$

2)压合合并:一分支若干提交合并为一个,然后合并到另外的分支上(squash)

zhangshuli@zhangshuli-MS-:~/myGit$ git branch
parent
son
* third
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch third
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# ccc.txt
# ddd.txt
nothing added to commit but untracked files present (use "git add" to track)
zhangshuli@zhangshuli-MS-:~/myGit$ git add ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "commit ccc.txt"
[third 6a74382] commit ccc.txt
files changed, insertions(+), deletions(-)
create mode ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 6a74382c9c481515cd70136ce3212ace7aa1c50e
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + commit ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch third
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# ddd.txt
nothing added to commit but untracked files present (use "git add" to track)
zhangshuli@zhangshuli-MS-:~/myGit$ git add .
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "commit ddd"
[third 618011f] commit ddd
files changed, insertions(+), deletions(-)
create mode ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 618011fc23e6fe8108e830e2812a298ad217d0cb
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + commit ddd
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ git merge --squash third
Updating 2a30fca..618011f
Fast-forward
Squash commit -- not updating HEAD
ccc.txt | +
ddd.txt | +
files changed, insertions(+), deletions(-)
create mode ccc.txt
create mode ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch parent
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: ccc.txt
# new file: ddd.txt
#
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "yahe"
[parent 02906a1] yahe
files changed, insertions(+), deletions(-)
create mode ccc.txt
create mode ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 02906a15dc15be5fefd5e41dcd3977bb2f762cff
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + yahe
zhangshuli@zhangshuli-MS-:~/myGit$

从上面我们可以看出来,所谓的压合分支,其实也是把另一个分支的状态全部移到另一个分支上,只是它并不是merge,而是把提交转化为变更存储到目标分支缓存,让你统一处理

3)捡选合并(cherry-picking):把某个提交进行合并

zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 068698c5c848ded943f3454691f420136a2930ee
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + cherry-pick
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ git cherry-pick 068698c5c848ded943f3454691f420136a2930ee
Finished one cherry-pick.
[parent 1c33f51] cherry-pick
files changed, insertions(+), deletions(-)
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ccc.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 1c33f513af17f21dd157522b98a2027047d599c3
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + cherry-pick
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ccc.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim aaa.txt
zhangshuli@zhangshuli-MS-:~/myGit$

它使用的命令是cherry-pick 而且参数已经不是branch 而是节点号了

如果你想cherry-pick某个提交,但是又不立刻把这个提交在本分支上提交,你可以使用参数-n 它的作用就和压合合并效果类似

zhangshuli@zhangshuli-MS-:~/myGit$ git cherry-pick -n 068698c5c848ded943f3454691f420136a2930ee
Finished one cherry-pick.
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch parent
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: aaa.txt
#
zhangshuli@zhangshuli-MS-:~/myGit$ git commit

2.合并分支冲突的处理

这时候只要执行命令git mergetool就行了,它会自动打开一个merge工具

git -处理分支合并的更多相关文章

  1. git 代码分支合并merge提交新修改远程以及本地分支

    第一步:创建本地分支 点击右键选择TortoiseGit,选择Create Branch…,在Branch框中填写新分支的名称(若选中”switch to new branch”则直接转到新分支上,省 ...

  2. Git dev分支合并到master分支完美实战

    aa@aa-PC MINGW64 /f/online-center/cloud/server-functions_services (master)                          ...

  3. Git设置分支保护实现CodeReview卡点

    # Git设置分支保护实现CodeReview卡点 > From:https://blog.csdn.net/crisschan/article/details/100922668 > G ...

  4. 分支合并git checkout adview git merge adview3

    分支合并 git checkout adview git merge adview3

  5. Git 分支合并

    理解核心 Git最初只有一个分支,所有后续分支都是直接或间接的从这个分支切出来的. 在任意两个分支上,向前追溯提交记录,都能找到一个最近的提交同时属于这两个分支,这个提交就是两个分支的分叉节点 分支合 ...

  6. Git入门指南十一:Git branch 分支与合并分支

    十五. Git branch 分支 查看当前有哪些branch bixiaopeng@bixiaopengtekiMacBook-Pro xmrobotium$ git branch * master ...

  7. git的工作流程(分支合并)

    git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如下: 去自己的工作分支$ git checkout work 工作.... 提交工作分支的修改$ ...

  8. Git的分支与合并

    在Git里面我们可以创建不同的分支,来进行调试.发布.维护等不同工作,而互不干扰.下面我们还是来创建一个试验仓库,看一下Git分支运作的台前幕后: $rm -rf test_branch_proj $ ...

  9. Git分支合并选择

    用Git进行多人协作开发时,必然会合并代码,解决冲突.然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦. Git上合并 ...

随机推荐

  1. Java基础学习总结(17)——线程

    一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个.class文件,机器上的一个.exe ...

  2. ecnu 1244

    SERCOI 近期设计了一种积木游戏.每一个游戏者有N块编号依次为1 ,2,-,N的长方体积木. 对于每块积木,它的三条不同的边分别称为"a边"."b边"和&q ...

  3. easyui combobox 设置值 顺序放在最后

    easyui combobox 设置值 顺序放在最后 如果设置函数.又设置选中的值,注意顺序, 设置值需要放到最后,否则会设置了之后又没有了: $('#spanId'+i).combobox(res) ...

  4. 软件project总结

    软件project的文档完结了.在这里面学到了好多东西.也通过它分析了对机房收费系统进行了更加具体的分析.尽管早就明确了之间的联系,可是越温习越体会到逻辑的重要性和全心全意为人民服务的精神. 这些文档 ...

  5. mybatis:开发环境搭建--增删改查--多表联合查询(多对一)

    什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或 ...

  6. BZOJ 3629 约数和定理+搜索

    呃呃 看到了这道题 没有任何思路-- 百度了一发题解 说要用约数和定理 就查了一发 http://baike.so.com/doc/7207502-7432191.html (不会的可以先学习一下) ...

  7. XML结构,写到TreeView树上

    http://blog.csdn.net/ztzi321/article/details/44077563

  8. 编写jsp代码时出现的红色提示线错误

    将jsp页面关闭:点击"X"号,例如图中的index.jsp页面的”X"号,或者右键—“close"也可以.   双击jsp页面:重新启动页面,页面的错误提示线 ...

  9. vue.js原生组件化开发(一)——组件开发基础

    前言 vue作为一个轻量级前端框架,其核心就是组件化开发.我们一般常用的是用脚手架vue-cli来进行开发和管理,一个个组件即为一个个vue页面,这种叫单文件组件.我们在引用组件之时只需将组件页面引入 ...

  10. JS构造函数、对象工厂、原型模式

    1.对象创建的3中方法 1.1.对象字面量 var obj = { name: "mingzi", work: function () { console.log("wo ...