但是 假如 我不想看到 分支转折点呢

合并的分支始终会存在一个交叉点

 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 进一步比较的更多相关文章

  1. [git]merge和rebase的区别

    前言 我从用git就一直用rebase,但是新的公司需要用merge命令,我不是很明白,所以查了一些资料,总结了下面的内容,如果有什么不妥的地方,还望指正,我一定虚心学习. merge和rebase ...

  2. git merge 和 rebase 区别

    git pull  超级不推荐使用git pull 有坑,谨慎使用,pull底层是merge git pull 是 git fetch + git merge FETCH_HEAD 的缩写.所以,默认 ...

  3. git merge,rebase和*(no branch)

    上一篇:http://blog.csdn.net/xiaoputao0903/article/details/23933589,说了git的分支,相关的使用方法没说到可是仅仅要google就能搜出一大 ...

  4. git merge 与 rebase

    git merge git rebase merge V.S. rebase 参考材料 写在开始: 对merge和rebase的用法总有疑惑,好像两个都能完成"获取别的branch的comm ...

  5. 关于git merge,rebase合并的差别,以及*(no branch)的处理。

    1.merge 在上篇介绍分支的时候有简单的说了一下分支的创建和合并,当时合并就是写的merge,这是依据两个不同分支的最后一次提交的commit对象c5,c7和两个分支的交叉点的commit对象c3 ...

  6. [Git] git merge和rebase的区别

    git merge 会生成一个新得合并节点,而rebase不会 比如: D---E test / A---B---C---F master 使用merge合并, 为分支合并自动识别出最佳的同源合并点: ...

  7. git——merge和rebase的区别

    参考http://www.jianshu.com/p/129e721adc6e 我在公司里看到其他同事都使用git pull --rebase拉取远程代码,而我总是用git pull,也有同事和我说过 ...

  8. git merge与rebase

    参考这篇文章 Git 之 merge 与 rebase 的区别  文章2 另外,使 rebase出现冲突后,先修改冲突,然后git add 某文件(我使用add  .经常有问题),然后git reba ...

  9. git merge 与 rebase 的区别

    http://gitbook.liuhui998.com/4_2.html merge rebase

随机推荐

  1. 编写高质量代码改善C#程序的157个建议——建议24:迭代器应该是只读的

    建议24:迭代器应该是只读的 如果注意观察会发现,FCL中的迭代器只有GetEnumerator方法,没有SetEnumerator方法,所有的集合类也没有一个可以写的迭代器属性.原因有二: 一:这违 ...

  2. OM Responsibility Flow

  3. 文字相对于 div 垂直居中

    通用方法 height  跟line-height div{ border: 1px solid black; text-align: left; height: 200px; line-height ...

  4. Ubuntu设置root账户密码

    创建Ubuntu后是没有root账户的,执行 sudo passwd root 然后系统会提示你输入普通用户的密码.输入后,按回车,然后重复输入两次新的root密码即可激活root用户.

  5. java jeesite.properties配置文件属性提取

    package com.thinkgem.jeesite.common.config; import java.io.UnsupportedEncodingException; import java ...

  6. MVC上的jsonp扩展,解决跨域访问问题

    总是有人会遇到跨域问题,然后有个jsonp的解决方案,MVC中代码如下: public class JsonpResult : System.Web.Mvc.JsonResult { object d ...

  7. Java Script 脚本的几种基本格式:

    1. <script>       document.Write("Hello wrrld!!!");     </script> 2. <scrip ...

  8. Selenium API(二)

    1.定位一组元素 WebDriver提供了8种定位一组元素的方法. driver.find_elements_by_css_selector() driver.find_elements_by_tag ...

  9. 20165219 2017-2018-2 《Java程序设计》第9周学习总结

    20165219 2017-2018-2 <Java程序设计>第9周学习总结 课本知识总结 URL类 URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称为客户端程 ...

  10. Mysql高性能优化规范建议

    数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意 ...