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

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

 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. 第16章-使用Spring MVC创建REST API

    1 了解REST 1.1 REST的基础知识 REST与RPC几乎没有任何关系.RPC是面向服务的,并关注于行为和动作:而REST是面向资源的,强调描述应用程序的事物和名词. 为了理解REST是什么, ...

  2. 编写高质量代码改善C#程序的157个建议——建议14: 正确实现浅拷贝和深拷贝

    建议14: 正确实现浅拷贝和深拷贝 为对象创建副本的技术称为拷贝(也叫克隆).我们将拷贝分为浅拷贝和深拷贝. 浅拷贝 将对象中的所有字段复制到新的对象(副本)中.其中,值类型字段的值被复制到副本中后, ...

  3. java多线程的基本介绍

    Java多线程 1.进程与线程 进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发展到最终消亡的过程.多进程操作系统能同时达运行多个 ...

  4. .net IAsyncResult 异步操作

    //定义一个委托 public delegate int DoSomething(int count); //BeginInvoke 的回调函数 private static void Execute ...

  5. 用css画的一个图形 空心正方形+四边四色

    div{ width: 100px; height: 100px; border: 100px solid black; border-left-color:darkcyan; border-righ ...

  6. ASP.NET jquery-1.9.1 语句

    <script src="Script/jquery-1.9.1.js"></script> <script language="javas ...

  7. Socket网络通讯

    网络编程 使用C#进行网络编程时,通常都需要用到System.Net命名空间.System.Net.Sockets命名空间和System.Net.Mail命名空间: 1. System.Net命名空间 ...

  8. mvc - view传值到js

    http://www.cnblogs.com/akwwl/p/5238975.html

  9. 快速搭建hadoop,学习使用

    1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=myvm ### 1 ...

  10. Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)

    #include<bits/stdc++.h>using namespace std;const long long mod=998244353;long long f[200007][2 ...