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. 【Educational Codeforces Round 37 B】 Tea Queue

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用一个队列来模拟排队就好. 队列放三元组(x,y,z) x表示人的下标,y和z分别表示进入和退出时间. 然后枚举时间从1到5000 ...

  2. hdu 1423 最长公共递增子序列 LCIS

    最长公共上升子序列(LCIS)的O(n^2)算法 预备知识:动态规划的基本思想,LCS,LIS. 问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列). 首先我们可以看到,这个问题具有相 ...

  3. C++函数指针相关 & 类成员的指针 & 成员函数的指针

    有时候会有指向类成员变量或者成员函数的指针,但是注意,这个指针并不是针对一个地址的指向,而更多的是一个偏移. 同时,支持将父类对象的成员 转为 子类对象的成员指针,如下: 反过来,是不行的.因为父类的 ...

  4. select &amp; epoll

    同步.异步.堵塞和非堵塞差别 同步:发出一个功能调用时.在没有得到结果之前,该调用就不返回 异步:当一个异步过程调用发出后.调用者不能立马得到结果.实际处理这个调用的部件在完毕后.通过状态.通知和回调 ...

  5. Android调用camera错误setParameters failed深层解析

    1. Camera Camera是Android framework里面支持的,同意你拍照和拍摄视频的设备,那么,在使用camera开发中总是会遇到一些问题,比例如以下面这样子的: E/Android ...

  6. Java之——删除ArrayList中的反复元素的2种方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47414935 ArrayList是Java中最经常使用的集合类型之中的一个.它同意 ...

  7. 控制器不存在:app\admin\controller\Document

    控制器不存在:app\admin\controller\Document 报错: 控制器不存在:app\admin\controller\Document 但是我在代码里面找了半天没出现Documen ...

  8. pandas 下的 one hot encoder 及 pd.get_dummies() 与 sklearn.preprocessing 下的 OneHotEncoder 的区别

    sklearn.preprocessing 下除了提供 OneHotEncoder 还提供 LabelEncoder(简单地将 categorical labels 转换为不同的数字): 1. 简单区 ...

  9. 简单STL笔记

    想了好久,还是把自己了解的先整理一下吧,毕竟老是忘,这里主要简单介绍三种容器 set,queue,vector,以及栈 stack,队列queue 的简单用法.一.set 在set中,效率比vecto ...

  10. <QT障碍之路>QApplication:No such file or directory

    原因:QT5将很多部件都移动了QT widgets模块中. 解决方法: 在.pro文件中添加 greaterThan(QT_MAJOR_VERSION, ): QT += widgets