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——认证概述
认证流程 身份认证流程 首先调用 Subject.login(token) 进行登录,其会自动委托给SecurityManager SecurityManager 负责真正的身份验证逻辑:它会委托给A ...
- plsql中的执行体
在plsql中的sql windows窗口中,可以编写一段执行体来达到一定的目的,类似于写一段程序,可有逻辑判断. 大概的格式为 declare ----定义变量 begin ----- 执行体: e ...
- QT背景
Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立基于window界面所需的功能. Qt是诺基亚公司的一个产品.1996年,Qt进入商业领域,已成为全世界范围内数千种成功的应 ...
- BZOJ 3083 遥远的国度(树链剖分+LCA)
Description 描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要z ...
- Django工程中使用echarts怎么循环遍历显示数据
前言: 后面要开发测试管理平台,需要用到数据可视化,所以研究了一下 先看下最后的图吧,单击最上方的按钮可以控制柱状图显隐 views.py # -*- coding: utf-8 -*- from _ ...
- delegate Func Action Expression
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; na ...
- C#中的Linq使用
First()与FirstOrDefault() 如何结合Expression 如何拼接以避免复杂的switch语句
- 巧用Scrum与Kanban
本文来自网易云社区 文\屈鹏飞 在互联网行业的项目管理实践中,敏捷和精益一直是大家所提倡的思想,其中Scrum和Kanban方法作为即敏捷又精益的典型代表,许多PM都在研究,笔者近期也在学习和实施Sc ...
- git Problem with the SSL CA cert (path? access rights?)
问题: [root@localhost opt]# git clone https://github.com/docker/docker.git 正克隆到 'docker'...fatal: unab ...
- 多线程《五》GIL全局解释器锁
一 引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native t ...