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
随机推荐
- 利用Thread.stop完成方法执行超时中断
示例代码可以从github上获取 https://github.com/git-simm/simm-framework.git 接上篇博客<FutureTask子线程取消执行的状态判断> ...
- 从后台传select的值
var option = ''; $.each(data, function (i, v) { option += "<option value='" + i + " ...
- 在sql server数据库可以插入在回车的数据
insert into t_FamilyClass (id,ParentId,Name) values(111,111,'111')可以在编辑模式下copy到editplus中,设置 显示 空白字符: ...
- 执行存储过程比即时SQL执行慢的解决方案
发生过这样一件事, 写了一个SQL,查询数据大概5秒,但是放到存储过程里面去了过后,查了5分钟也没给出结果,后来网上找解决方案,终于找到一个解决方案. 在存储过程的参数那里对参数进行一个传递.反正他们 ...
- 封闭类------新标准c++程序设计
封闭类: 一个类的成员变量如果是另一个类的对象,就称之为“成员对象”.包含成员对象的类叫封闭类. #include<iostream> using namespace std; cl ...
- 《C#多线程编程实战》1.11 Monitor.TryEnter()避免死锁
这章的内容是真的有意思 特别是代码. 先贴上代码: class Program { static void Main(string[] args) { object lock1 = new objec ...
- struts2配置文件的解释
1 <?xml version="1.0" encoding="GB2312"?> <!DOCTYPE struts PUBLIC &quo ...
- NSSize 尺寸
前言 结构体,这个结构体用来表示事物的宽度和高度. typedef CGSize NSSize; struct CGSize { CGFloat width; CGFloat height; }; t ...
- 如何安装memcached
软件的下载,好像从官网上只能下载未经编译的源码,需要自己编译后才能安装使用,不熟悉的用户还是直接百度搜索下载比较好,这里也提供一个下载地址给大家参考. www.newasp.net/soft/6373 ...
- Java 根据Date计算年龄