Git merge 和 rebase 进一步比较
但是 假如 我不想看到 分支转折点呢
合并的分支始终会存在一个交叉点
Microsoft Windows [版本 10.0.17134.345]
(c) Microsoft Corporation。保留所有权利。 C:\Users\zhangyang\Desktop\b>git init
Initialized empty Git repository in C:/Users/zhangyang/Desktop/b/.git/ C:\Users\zhangyang\Desktop\b>git commit -m "Init Commit" --allow-empty
[master (root-commit) d1be01c] Init Commit C:\Users\zhangyang\Desktop\b>git checkout -b branch1
Switched to a new branch 'branch1' C:\Users\zhangyang\Desktop\b>git checkout -b branch2
Switched to a new branch 'branch2' C:\Users\zhangyang\Desktop\b>git checkout -b branch3
Switched to a new branch 'branch3' C:\Users\zhangyang\Desktop\b>git log --oneline --graph --decorate --all
* d1be01c (HEAD -> branch3, master, branch2, branch1) Init Commit C:\Users\zhangyang\Desktop\b>git commit -m "C1 on branch3" --allow-empty
[branch3 ca874a1] C1 on branch3 C:\Users\zhangyang\Desktop\b>git commit -m "C2 on branch3" --allow-empty
[branch3 a21efa5] C2 on branch3 C:\Users\zhangyang\Desktop\b>git commit -m "C3 on branch3" --allow-empty
[branch3 67c01b8] C3 on branch3 C:\Users\zhangyang\Desktop\b>git checkout branch2
Switched to branch 'branch2' C:\Users\zhangyang\Desktop\b>git commit -m "C4 on branch2" --allow-empty
[branch2 2ca7365] C4 on branch2 C:\Users\zhangyang\Desktop\b>git commit -m "C5 on branch2" --allow-empty
[branch2 5c6f50e] C5 on branch2 C:\Users\zhangyang\Desktop\b>git commit -m "C6 on branch2" --allow-empty
[branch2 ] C6 on branch2 C:\Users\zhangyang\Desktop\b>git checkout branch1
Switched to branch 'branch1' C:\Users\zhangyang\Desktop\b>git commit -m "C7 on branch2" --allow-empty
[branch1 7890d59] C7 on branch2 C:\Users\zhangyang\Desktop\b>git commit -m "C8 on branch2" --allow-empty
[branch1 713a602] C8 on branch2 C:\Users\zhangyang\Desktop\b>git commit -m "C9 on branch2" --allow-empty
[branch1 28c5cc3] C9 on branch2 C:\Users\zhangyang\Desktop\b>git log
commit 28c5cc366857090fec62621a646ec0f93f17d727 (HEAD -> branch1)
Author: yqmcu <yqmcu@foxmail.com>
Date: Tue Feb :: + C9 on branch2 commit 713a602ef4a45a43fe9b4b62cdd7f970b12e6b30
Author: yqmcu <yqmcu@foxmail.com>
Date: Tue Feb :: + C8 on branch2 commit 7890d598abfc63c4940faca451abd017d0b0d574
Author: yqmcu <yqmcu@foxmail.com>
Date: Tue Feb :: + C7 on branch2 commit d1be01c45a906b4325388e465e13aa4269718773 (master)
Author: yqmcu <yqmcu@foxmail.com>
Date: Tue Feb :: + Init Commit C:\Users\zhangyang\Desktop\b>git log --oneline --graph --all --decorate
* 28c5cc3 (HEAD -> branch1) C9 on branch2
* 713a602 C8 on branch2
* 7890d59 C7 on branch2
| * (branch2) C6 on branch2
| * 5c6f50e C5 on branch2
| * 2ca7365 C4 on branch2
|/
| * 67c01b8 (branch3) C3 on branch3
| * a21efa5 C2 on branch3
| * ca874a1 C1 on branch3
|/
* d1be01c (master) Init Commit C:\Users\zhangyang\Desktop\b>git reset d1be01c --hard
HEAD is now at d1be01c Init Commit C:\Users\zhangyang\Desktop\b>git log --oneline --graph --all --decorate
* (branch2) C6 on branch2
* 5c6f50e C5 on branch2
* 2ca7365 C4 on branch2
| * 67c01b8 (branch3) C3 on branch3
| * a21efa5 C2 on branch3
| * ca874a1 C1 on branch3
|/
* d1be01c (HEAD -> branch1, master) Init Commit C:\Users\zhangyang\Desktop\b>git commit -m "C7 on branch1" --allow-empty
[branch1 07ace42] C7 on branch1 C:\Users\zhangyang\Desktop\b>git commit -m "C7 on branch2" --allow-empty
[branch1 c85e1c1] C7 on branch2 C:\Users\zhangyang\Desktop\b>git commit --amend
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
On branch branch1
No changes C:\Users\zhangyang\Desktop\b>git commit --amend --allow-empty
[branch1 96a66a6] C7 on branch1
Date: Tue Feb :: + C:\Users\zhangyang\Desktop\b>git log --oneline --graph --all --decorate
* 96a66a6 (HEAD -> branch1) C7 on branch1
* 07ace42 C7 on branch1
| * (branch2) C6 on branch2
| * 5c6f50e C5 on branch2
| * 2ca7365 C4 on branch2
|/
| * 67c01b8 (branch3) C3 on branch3
| * a21efa5 C2 on branch3
| * ca874a1 C1 on branch3
|/
* d1be01c (master) Init Commit C:\Users\zhangyang\Desktop\b>git commit --amend --allow-empty
[branch1 abc5b64] C8 on branch1
Date: Tue Feb :: + C:\Users\zhangyang\Desktop\b>git log --oneline --graph --all --decorate
* abc5b64 (HEAD -> branch1) C8 on branch1
* 07ace42 C7 on branch1
| * (branch2) C6 on branch2
| * 5c6f50e C5 on branch2
| * 2ca7365 C4 on branch2
|/
| * 67c01b8 (branch3) C3 on branch3
| * a21efa5 C2 on branch3
| * ca874a1 C1 on branch3
|/
* d1be01c (master) Init Commit C:\Users\zhangyang\Desktop\b>git commit -m "C9 on branch1" --allow-empty
[branch1 f5f2d95] C9 on branch1 C:\Users\zhangyang\Desktop\b>git log --oneline --graph --all --decorate
* f5f2d95 (HEAD -> branch1) C9 on branch1
* abc5b64 C8 on branch1
* 07ace42 C7 on branch1
| * (branch2) C6 on branch2
| * 5c6f50e C5 on branch2
| * 2ca7365 C4 on branch2
|/
| * 67c01b8 (branch3) C3 on branch3
| * a21efa5 C2 on branch3
| * ca874a1 C1 on branch3
|/
* d1be01c (master) Init Commit C:\Users\zhangyang\Desktop\b>git merge branch3
Already up to date!
Merge made by the 'recursive' strategy. C:\Users\zhangyang\Desktop\b>git log --oneline --graph --all --decorate
* f75db08 (HEAD -> branch1) Merge branch 'branch3' into branch1
|\
| * 67c01b8 (branch3) C3 on branch3
| * a21efa5 C2 on branch3
| * ca874a1 C1 on branch3
* | f5f2d95 C9 on branch1
* | abc5b64 C8 on branch1
* | 07ace42 C7 on branch1
|/
| * (branch2) C6 on branch2
| * 5c6f50e C5 on branch2
| * 2ca7365 C4 on branch2
|/
* d1be01c (master) Init Commit C:\Users\zhangyang\Desktop\b>git checkout branch2
Switched to branch 'branch2' C:\Users\zhangyang\Desktop\b>git rebase branch3
First, rewinding head to replay your work on top of it... C:\Users\zhangyang\Desktop\b>git log --oneline --graph --all --decorate
* f75db08 (branch1) Merge branch 'branch3' into branch1
|\
| * 67c01b8 (HEAD -> branch2, branch3) C3 on branch3
| * a21efa5 C2 on branch3
| * ca874a1 C1 on branch3
* | f5f2d95 C9 on branch1
* | abc5b64 C8 on branch1
* | 07ace42 C7 on branch1
|/
* d1be01c (master) Init Commit 209
git rebase 在修改 commit 提交内容上发挥了很好的作用
它不会像merge一样还会给你造成冲突conflicx
C:\Users\zhangyang\Desktop\c>git rebase a8404dc
First, rewinding head to replay your work on top of it... C:\Users\zhangyang\Desktop\c>git log --oneline --graph
* a8404dc (HEAD, rename) C1 on branch1 amend return to modify
* abd1ba4 (master) Init Commit C:\Users\zhangyang\Desktop\c>git checkout branch1
Previous HEAD position was a8404dc C1 on branch1 amend return to modify
Switched to branch 'branch1' C:\Users\zhangyang\Desktop\c>git log --oneline --graph
* 67297ca (HEAD -> branch1) C3 on branch1
* a23adfc C2 on branch1
* 7d5f43e C1 on branch1
* abd1ba4 (master) Init Commit C:\Users\zhangyang\Desktop\c>git rebase rename
First, rewinding head to replay your work on top of it...
Applying: C2 on branch1
Applying: C3 on branch1 C:\Users\zhangyang\Desktop\c>git log --oneline --graph
* d639db7 (HEAD -> branch1) C3 on branch1
* 5f2ecaa C2 on branch1
* a8404dc (rename) C1 on branch1 amend return to modify
* abd1ba4 (master) Init Commit C:\Users\zhangyang\Desktop\c>git checkout 5f2ecaa
Note: checking out '5f2ecaa'. You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 5f2ecaa C2 on branch1 C:\Users\zhangyang\Desktop\c>git commit --amend
[detached HEAD 4b7fcad] C2 on branch1 amend return to modify
Date: Tue Feb :: +
file changed, insertion(+) C:\Users\zhangyang\Desktop\c>git checkout branch1
Warning: you are leaving commit behind, not connected to
any of your branches: 4b7fcad C2 on branch1 amend return to modify If you want to keep it by creating a new branch, this may be a good time
to do so with: git branch <new-branch-name> 4b7fcad Switched to branch 'branch1' C:\Users\zhangyang\Desktop\c>git merge 4d7fcad
merge: 4d7fcad - not something we can merge C:\Users\zhangyang\Desktop\c>git rebase 4d7fcad
fatal: Needed a single revision
invalid upstream '4d7fcad' C:\Users\zhangyang\Desktop\c>git branch
* branch1
master
rename C:\Users\zhangyang\Desktop\c>git branch -d rename
Deleted branch rename (was a8404dc). C:\Users\zhangyang\Desktop\c>git branch rename 4d7fcad
fatal: Not a valid object name: '4d7fcad'. C:\Users\zhangyang\Desktop\c>git branch rename 4b7fcad C:\Users\zhangyang\Desktop\c>git checkout branch1
Already on 'branch1' C:\Users\zhangyang\Desktop\c>git merge rename
Auto-merging log
CONFLICT (content): Merge conflict in log
Automatic merge failed; fix conflicts and then commit the result. C:\Users\zhangyang\Desktop\c>git status
On branch branch1
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: log no changes added to commit (use "git add" and/or "git commit -a") C:\Users\zhangyang\Desktop\c>git merge --abort C:\Users\zhangyang\Desktop\c>git rebase rename
First, rewinding head to replay your work on top of it...
Applying: C3 on branch1 C:\Users\zhangyang\Desktop\c>git log --oneline --graph
* 0b3cc39 (HEAD -> branch1) C3 on branch1
* 4b7fcad (rename) C2 on branch1 amend return to modify
* a8404dc C1 on branch1 amend return to modify
* abd1ba4 (master) Init Commit C:\Users\zhangyang\Desktop\c>git reflog
0b3cc39 (HEAD -> branch1) HEAD@{}: rebase finished: returning to refs/heads/branch1
0b3cc39 (HEAD -> branch1) HEAD@{}: rebase: C3 on branch1
4b7fcad (rename) HEAD@{}: rebase: checkout rename
d639db7 HEAD@{}: reset: moving to HEAD
d639db7 HEAD@{}: checkout: moving from branch1 to branch1
d639db7 HEAD@{}: checkout: moving from 4b7fcad85c9476434c25ed17436e7fa9efa74afb to branch1
4b7fcad (rename) HEAD@{}: commit (amend): C2 on branch1 amend return to modify
5f2ecaa HEAD@{}: checkout: moving from branch1 to 5f2ecaa
d639db7 HEAD@{}: rebase finished: returning to refs/heads/branch1
d639db7 HEAD@{}: rebase: C3 on branch1
5f2ecaa HEAD@{}: rebase: C2 on branch1
a8404dc HEAD@{}: rebase: checkout rename
67297ca HEAD@{}: checkout: moving from a8404dcdc9edf2700d3cafd3136670c1140eeb9f to branch1
a8404dc HEAD@{}: rebase: checkout a8404dc
7d5f43e HEAD@{}: checkout: moving from branch1 to 7d5f43e
67297ca HEAD@{}: checkout: moving from a8404dcdc9edf2700d3cafd3136670c1140eeb9f to branch1
a8404dc HEAD@{}: commit (amend): C1 on branch1 amend return to modify
7d5f43e HEAD@{}: checkout: moving from branch1 to 7d5f43e
67297ca HEAD@{}: commit (amend): C3 on branch1
8f51c6b HEAD@{}: commit: C2 on branch1
a23adfc HEAD@{}: commit: C2 on branch1
7d5f43e HEAD@{}: commit: C1 on branch1
abd1ba4 (master) HEAD@{}: checkout: moving from master to branch1
abd1ba4 (master) HEAD@{}: commit (initial): Init Commit
Git merge 和 rebase 进一步比较的更多相关文章
- [git]merge和rebase的区别
前言 我从用git就一直用rebase,但是新的公司需要用merge命令,我不是很明白,所以查了一些资料,总结了下面的内容,如果有什么不妥的地方,还望指正,我一定虚心学习. merge和rebase ...
- git merge 和 rebase 区别
git pull 超级不推荐使用git pull 有坑,谨慎使用,pull底层是merge git pull 是 git fetch + git merge FETCH_HEAD 的缩写.所以,默认 ...
- git merge,rebase和*(no branch)
上一篇:http://blog.csdn.net/xiaoputao0903/article/details/23933589,说了git的分支,相关的使用方法没说到可是仅仅要google就能搜出一大 ...
- git merge 与 rebase
git merge git rebase merge V.S. rebase 参考材料 写在开始: 对merge和rebase的用法总有疑惑,好像两个都能完成"获取别的branch的comm ...
- 关于git merge,rebase合并的差别,以及*(no branch)的处理。
1.merge 在上篇介绍分支的时候有简单的说了一下分支的创建和合并,当时合并就是写的merge,这是依据两个不同分支的最后一次提交的commit对象c5,c7和两个分支的交叉点的commit对象c3 ...
- [Git] git merge和rebase的区别
git merge 会生成一个新得合并节点,而rebase不会 比如: D---E test / A---B---C---F master 使用merge合并, 为分支合并自动识别出最佳的同源合并点: ...
- git——merge和rebase的区别
参考http://www.jianshu.com/p/129e721adc6e 我在公司里看到其他同事都使用git pull --rebase拉取远程代码,而我总是用git pull,也有同事和我说过 ...
- git merge与rebase
参考这篇文章 Git 之 merge 与 rebase 的区别 文章2 另外,使 rebase出现冲突后,先修改冲突,然后git add 某文件(我使用add .经常有问题),然后git reba ...
- git merge 与 rebase 的区别
http://gitbook.liuhui998.com/4_2.html merge rebase
随机推荐
- Shiro——认证
引入shiro依赖 <!-- shiro --> <dependency> <!-- shiro-core Required in all environments. - ...
- Django-Web框架之创建项目和应用
Django我们是基于python3来演示的.首先我们来安装一下django框架.使用pip3 install django安装的是最新的版本: 我们在pycharm中创建django工程.如图所示: ...
- 十进制--->二进制(利用C++栈功能)
原创 十进制转二进制很简单,其中用到C++的栈功能就能更加方便! stack<int> s; //栈的定义,s已经被定义为一个栈 s.push(); //将20入栈 s.push(); s ...
- java实现wc功能
github项目地址:https://github.com/3216004717/ruanjiangongcheng.git 项目相关要求 基本要求 wc.exe -c file.c //返回文件 f ...
- Maven整理笔记の初步窥探
第一部分:引言 Maven是一款跨平台的项目管理工具,作为Apache组织的一个开源项目,主要服务于基于java平台的项目构建.依赖管理和项目信息管理. 项目构建:编译.运行单元测试.生成文档.打包和 ...
- 游戏中遇到的BUG
(1)bug描述:战斗中有英雄死亡,一方掉线之后再次上线,仍然可以看到死亡英雄空血条(英雄受到攻击才会显示血条) 解决方案:原来 当前血量小于英雄血量最大值时,证明英雄受到伤害,血条显示为true I ...
- 基于verilog的FFT算法8点12位硬件实现
FFT算法8点12位硬件实现 (verilog) 1 一.功能描述: 1 二.设计结构: 2 三.设计模块介绍 3 1.蝶形运算(第一级) 3 2.矢量角度旋转(W) 4 3.CORDIC 结果处理 ...
- 单链表倒数第K个节点的查找和显示
1.使用一个固定长度队列装链表段,当遍历到链表根时,返回队列头元素. class Node{ int value; Node next; public Node(int value){ this.va ...
- iOS系统各个版本的占比查询
目的:为了向大多数看齐,我们要实时了解应用系统的使用占比 1.苹果官网查询各个系统的占比: Apple 2.各种设备各种系统的占比 第三方
- Jmeter_实现Excel文件导出到本地
一般而言,对于页面的“导出”操作,主要经历如下两个操作:①根据数据库的内容,将文件导出到应用服务器上:②将服务器上的文件下载到本地电脑: Jmeter同LoadRunner类似,只能记录服务端与客户端 ...