Git概念:什么是分支

为什么要有分支呢,有分支的话让多人可以进行更高效的开发。

查看分支,分支一览表

$ git branch
* master
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)

只有这一个分支,再master前面有个*号,表示当前所在的分支。

创建分支,切换分支 git checkout -b

#创建并切换分支
$ git checkout -b feature-A
Switched to a new branch 'feature-A'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ #或者执行下面的连续两条是同样的效果
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git branch feature-A
fatal: A branch named 'feature-A' already exists.
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git checkout feature-A
Already on 'feature-A'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git branch
* feature-A
  master
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ #如果在分支 feature-A下进行如上述master的操作,那么称为培育分支,来实际操作下

$ vi READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git add READM.md
warning: LF will be replaced by CRLF in READM.md.
The file will have its original line endings in your working directory.
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git commit  -m "Add feature-A"
[feature-A warning: LF will be replaced by CRLF in READM.md.
The file will have its original line endings in your working directory.
1eff5aa] Add feature-A
warning: LF will be replaced by CRLF in READM.md.
The file will have its original line endings in your working directory.
 1 file changed, 2 insertions(+)
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ #修改分支feature-A算是完成了,看下master分支是否受到影响了
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git che
checkout      cherry        cherry-pick
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git che
checkout      cherry        cherry-pick
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git checkout master
Switched to branch 'master'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$ cat READM.md
hello world !
#get some diff
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#重新切换为feature-A
$ git checkout feature-A
Switched to branch 'feature-A'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ cat READM.md
hello world !
#get some diff
        -feature-A
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$

特性分支

特性分支的概念是为了集中实现单一特性,除此之外不进行任何作业的分支,再日常开发中,往往会创建数个特性分支,同时在此之外保留一个随时可以发布软件的稳定分支,一般是master。

针对某个特性分支,一般为了实现某个功能,除此之外不进行任何作业,即便在开发过程中发现了bug,也需要创建新的分支,在新分支中进行修正。

主干分支

一般配置在正式环境中,需要tag标签,同时管理多个版本发布,所以主干分支也有多个。

git merge 合并分支

Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ #切换到主干分支
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-A)
$ git checkout master
Switched to branch 'master'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$ git checkout master
Already on 'master'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#多次切换会提示
$ git checkout master
Already on 'master'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#用这个命令进行合并,执行完成后会弹出一个文本要求你进行编辑,若不需要直接进行保存即可,保存完毕后弹出下面的提示
$ git merge --no-ff feature-A
Merge made by the 'recursive' strategy.
 READM.md | 2 ++
 1 file changed, 2 insertions(+)
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$

以图表形式查看分支



$ #以图表形式查看分支
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$ git log --graph
*   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\  Merge: 478c9d6 1eff5aa
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |     Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
      Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$

回溯历史版本

#查看下版本信息
$ git log --graph
*   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\  Merge: 478c9d6 1eff5aa
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |     Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
      Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#回退到创建feature-A之前的版本
$ git reset --hard 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
HEAD is now at 478c9d6 Add index
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#查看日志,回退成功
$ git log --graph
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
      Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#如果我后悔了,想撤销刚才的操作,那么可以看下整个仓库的日志,找到当时的哈希值,再次进行回退即可
$ git reflog
478c9d6 HEAD@{0}: reset: moving to 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
bc39e02 HEAD@{1}: merge feature-A: Merge made by the 'recursive' strategy.
478c9d6 HEAD@{2}: checkout: moving from master to master
478c9d6 HEAD@{3}: checkout: moving from master to master
478c9d6 HEAD@{4}: checkout: moving from feature-A to master
1eff5aa HEAD@{5}: checkout: moving from master to feature-A
478c9d6 HEAD@{6}: checkout: moving from feature-A to master
1eff5aa HEAD@{7}: checkout: moving from master to feature-A
478c9d6 HEAD@{8}: checkout: moving from feature-A to master
1eff5aa HEAD@{9}: commit: Add feature-A
478c9d6 HEAD@{10}: checkout: moving from feature-A to feature-A
478c9d6 HEAD@{11}: checkout: moving from master to feature-A
478c9d6 HEAD@{12}: commit: Add index
05791aa HEAD@{13}: commit (initial): Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$ git reset --hard bc39e02
HEAD is now at bc39e02 Merge branch 'feature-A'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#回退成功,查看版本历史
$ git log --graph
*   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\  Merge: 478c9d6 1eff5aa
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |     Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
      Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$

复杂点的版本回溯

  1. 先将版本回退到创建分支A之前的状态,接着创建分支feature-B,修改README.md文件,在原来修改feature-A的位置,然后直接提交修改。
  2. 将版本回溯合并分支A之后的状态,然后将B提交,会产生冲突,解决冲突。
#创建分支B
$ git branch feature-B
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$ git checkout feature-B
Switched to branch 'feature-B'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ ls
READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ vi READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ cat READM.md
hello world !
#get some diff
        -feature-B
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ #看下日志
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ git log
commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
Author: Thinker young <x695@qq.com>
Date:   Wed Mar 9 20:29:28 2016 +0800
    Add index
commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
Author: Thinker young <x695@qq.com>
Date:   Wed Mar 9 20:06:28 2016 +0800
    Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ # 进行提交:先添加,再提交,永远都是这个样子
$ git add READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ git commit
[feature-B f6937f8] Fix B
 1 file changed, 2 insertions(+)
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
$ git log
commit f6937f8dc33977d589a26d7a50c8c35d2eb0138f
Author: Thinker young <x695@qq.com>
Date:   Fri Mar 11 19:42:55 2016 +0800
    Fix B
commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
Author: Thinker young <x695@qq.com>
Date:   Wed Mar 9 20:29:28 2016 +0800
    Add index
commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
Author: Thinker young <x695@qq.com>
Date:   Wed Mar 9 20:06:28 2016 +0800
    Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
#看下仓库更改历史
$ git reflog
f6937f8 HEAD@{0}: commit: Fix B
478c9d6 HEAD@{1}: checkout: moving from master to feature-B
478c9d6 HEAD@{2}: reset: moving to 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
bc39e02 HEAD@{3}: reset: moving to bc39e02
478c9d6 HEAD@{4}: reset: moving to 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
bc39e02 HEAD@{5}: reset: moving to bc39e02
478c9d6 HEAD@{6}: reset: moving to 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
bc39e02 HEAD@{7}: merge feature-A: Merge made by the 'recursive' strategy.
478c9d6 HEAD@{8}: checkout: moving from master to master
478c9d6 HEAD@{9}: checkout: moving from master to master
478c9d6 HEAD@{10}: checkout: moving from feature-A to master
1eff5aa HEAD@{11}: checkout: moving from master to feature-A
478c9d6 HEAD@{12}: checkout: moving from feature-A to master
1eff5aa HEAD@{13}: checkout: moving from master to feature-A
478c9d6 HEAD@{14}: checkout: moving from feature-A to master
1eff5aa HEAD@{15}: commit: Add feature-A
478c9d6 HEAD@{16}: checkout: moving from feature-A to feature-A
478c9d6 HEAD@{17}: checkout: moving from master to feature-A
478c9d6 HEAD@{18}: commit: Add index
05791aa HEAD@{19}: commit (initial): Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-B)
#切换到主分支,进行回滚,这里的操作只是影响master分支,对分支B里面的改动没有任何影响,分支B还是分支B,不会影响到master分支
$ git checkout -
Switched to branch 'master'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#master分支回滚到合并A分支之后的状态
$ git reset --hard bc39e02
HEAD is now at bc39e02 Merge branch 'feature-A'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#看下日志
$ git log --graph
*   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\  Merge: 478c9d6 1eff5aa
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |     Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
      Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#在尝试合并分支B前,看下分支的情况
$ git branch
  feature-A
  feature-B
* master
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#目前git的回退只是针对某个版本绘图,创建的分支不会丢失
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)

#合并分支B,提示有冲突,无法进行自动合并
$ git merge --no-ff feature-B
Auto-merging READM.md
CONFLICT (content): Merge conflict in READM.md
Automatic merge failed; fix conflicts and then commit the result.
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master|MERGING)
$ cat READM.md
hello world !
#get some diff
<<<<<<< HEAD
        -feature-A
=======
        -feature-B
>>>>>>> feature-B
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master|MERGING)
$
#进行消除冲突,直接vi编辑这个文件
$ vi READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master|MERGING)
$ cat READM.md
hello world !
#get some diff
        -feature-A
        -feature-B
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master|MERGING)
$ #再次提交
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master|MERGING)
$ git add READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master|MERGING)
$ git commit -m "fix confict"
[master 43b9aec] fix confict
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
#查看下日志
$ git log --graph
*   commit 43b9aeca122aaeac48565751af1d57a5c435ac77
|\  Merge: bc39e02 f6937f8
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 20:01:46 2016 +0800
| |
| |     fix confict
| |
| * commit f6937f8dc33977d589a26d7a50c8c35d2eb0138f
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 19:42:55 2016 +0800
| |
| |     Fix B
| |
* |   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\ \  Merge: 478c9d6 1eff5aa
| |/  Author: Thinker young <x695@qq.com>
|/|   Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |       Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
      Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)

修改提交信息 git commit –amend

修改注释,上面了将注释修改成 fix conflict ,实际是fix-B的合并,解决合并时发生的冲突只是过程之一,标记不对,需要重新修改


$ git commit --amend
[master 0158cdf] Merage branch feature-B
 Date: Fri Mar 11 20:01:46 2016 +0800
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$ git log --graph
*   commit 0158cdfa04a60005b146786017a0d95b985afa84
|\  Merge: bc39e02 f6937f8
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 20:01:46 2016 +0800
| |
| |     Merage branch feature-B
| |
| * commit f6937f8dc33977d589a26d7a50c8c35d2eb0138f
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 19:42:55 2016 +0800
| |
| |     Fix B
| |
* |   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\ \  Merge: 478c9d6 1eff5aa
| |/  Author: Thinker young <x695@qq.com>
|/|   Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |       Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
:

git rebase -i 压缩历史

在合并特性分支之前,如果发现已经提交的内容有拼写错误,先提交一个修改,将这个修改应用到前一个有错误的提交中,压缩成一个历史记录。

$ #创建一个分支C
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (master)
$ git checkout -b feature-C
Switched to a new branch 'feature-C'
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)

$ vi READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ cat READM.md
hello world !
#get some diff
        -feature-A
        -feature-B
        -frature-C
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
#多了两行,一个空行,一个有字行
$ git diff
diff --git a/READM.md b/READM.md
index d4c4875..04a5e98 100644
--- a/READM.md
+++ b/READM.md
@@ -3,3 +3,5 @@ hello world !
        -feature-A
        -feature-B
+       -frature-C
+
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ # 直接提交
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git commit -a
[feature-C 20f95ff] Add feature-C
 1 file changed, 2 insertions(+)
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
#删除空行,再次提交
$ vi READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git commit -a
[feature-C 8cb86a8] delete null row on feature-C
 1 file changed, 1 deletion(-)
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git diff
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ cat READM.md
hello world !
#get some diff
        -feature-A
        -feature-B
        -frature-C
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git diff
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
#再次修改,修正错误单词
$ vi READM.md
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git diff
diff --git a/READM.md b/READM.md
index dc2def4..8531ab0 100644
--- a/READM.md
+++ b/READM.md
@@ -3,4 +3,4 @@ hello world !
        -feature-A
        -feature-B
-       -frature-C
+       -feature-C
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
#此类的修改叫做typp
$ git commit -am "Fix typo"
[feature-C 9c73c7c] Fix typo
 1 file changed, 1 insertion(+), 1 deletion(-)
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git diff
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ #现在修改了三次(1.首次创建2.删除空行3,修改拼写错误),那么我们将这三次的修改历史弄成一次历史
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git log
commit 9c73c7c92d58c4fb005239edec00fe4b7eba5e75
Author: Thinker young <x695@qq.com>
Date:   Fri Mar 11 20:24:40 2016 +0800
    Fix typo
commit 8cb86a88a1d95dea0d17a58a7870d5219322ec2a
Author: Thinker young <x695@qq.com>
Date:   Fri Mar 11 20:19:25 2016 +0800
    delete null row on feature-C
commit 20f95ff9e1aa9bb727991cae274826ea0f9aa13d
Author: Thinker young <x695@qq.com>
Date:   Fri Mar 11 20:18:43 2016 +0800
    Add feature-C
commit 0158cdfa04a60005b146786017a0d95b985afa84
Merge: bc39e02 f6937f8
Author: Thinker young <x695@qq.com>
Date:   Fri Mar 11 20:01:46 2016 +0800
    Merage branch feature-B
commit f6937f8dc33977d589a26d7a50c8c35d2eb0138f
Author: Thinker young <x695@qq.com>
Date:   Fri Mar 11 19:42:55 2016 +0800
    Fix B
commit bc39e02e659481efad23e28cc893da33e4ad2283
Merge: 478c9d6 1eff5aa
Author: Thinker young <x695@qq.com>
Date:   Fri Mar 11 18:37:04 2016 +0800
    Merge branch 'feature-A'
commit 1eff5aac5583332f40846edfffaee45e86c18d18
Author: Thinker young <x695@qq.com>
Date:   Wed Mar 9 20:46:18 2016 +0800
    Add feature-A
commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
Author: Thinker young <x695@qq.com>
Date:   Wed Mar 9 20:29:28 2016 +0800
    Add index
commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
Author: Thinker young <x695@qq.com>
Date:   Wed Mar 9 20:06:28 2016 +0800
    Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git reflog
9c73c7c HEAD@{0}: commit: Fix typo
8cb86a8 HEAD@{1}: commit: delete null row on feature-C
20f95ff HEAD@{2}: commit: Add feature-C
0158cdf HEAD@{3}: checkout: moving from master to feature-C
0158cdf HEAD@{4}: commit (amend): Merage branch feature-B
87210d3 HEAD@{5}: commit (amend): Mer age branch feature-B
43b9aec HEAD@{6}: commit (merge): fix confict
bc39e02 HEAD@{7}: reset: moving to bc39e02
478c9d6 HEAD@{8}: checkout: moving from feature-B to master
f6937f8 HEAD@{9}: commit: Fix B
478c9d6 HEAD@{10}: checkout: moving from master to feature-B
478c9d6 HEAD@{11}: reset: moving to 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
bc39e02 HEAD@{12}: reset: moving to bc39e02
478c9d6 HEAD@{13}: reset: moving to 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
bc39e02 HEAD@{14}: reset: moving to bc39e02
478c9d6 HEAD@{15}: reset: moving to 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
bc39e02 HEAD@{16}: merge feature-A: Merge made by the 'recursive' strategy.
478c9d6 HEAD@{17}: checkout: moving from master to master
478c9d6 HEAD@{18}: checkout: moving from master to master
478c9d6 HEAD@{19}: checkout: moving from feature-A to master
1eff5aa HEAD@{20}: checkout: moving from master to feature-A
478c9d6 HEAD@{21}: checkout: moving from feature-A to master
1eff5aa HEAD@{22}: checkout: moving from master to feature-A
478c9d6 HEAD@{23}: checkout: moving from feature-A to master
1eff5aa HEAD@{24}: commit: Add feature-A
478c9d6 HEAD@{25}: checkout: moving from feature-A to feature-A
478c9d6 HEAD@{26}: checkout: moving from master to feature-A
478c9d6 HEAD@{27}: commit: Add index
05791aa HEAD@{28}: commit (initial): Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)

#下面的这个命令弄错了

#合并前两行:将最后一行得pick 改成f,这样的效果是相当于删除了单词拼写错误这个历史
$ git rebase -i HEAD~3
[detached HEAD 7cec57f] delete null row on feature-C
 Date: Fri Mar 11 20:19:25 2016 +0800
 1 file changed, 1 insertion(+), 2 deletions(-)
Successfully rebased and updated refs/heads/feature-C.
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ git log --graph
* commit 7cec57f0d26fca208a5724d0a02d8181d2841a91
| Author: Thinker young <x695@qq.com>
| Date:   Fri Mar 11 20:19:25 2016 +0800
|
|     delete null row on feature-C
|
* commit 20f95ff9e1aa9bb727991cae274826ea0f9aa13d
| Author: Thinker young <x695@qq.com>
| Date:   Fri Mar 11 20:18:43 2016 +0800
|
|     Add feature-C
|
*   commit 0158cdfa04a60005b146786017a0d95b985afa84
|\  Merge: bc39e02 f6937f8
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 20:01:46 2016 +0800
| |
| |     Merage branch feature-B
| |
| * commit f6937f8dc33977d589a26d7a50c8c35d2eb0138f
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 19:42:55 2016 +0800
| |
| |     Fix B
| |
* |   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\ \  Merge: 478c9d6 1eff5aa
| |/  Author: Thinker young <x695@qq.com>
|/|   Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |       Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
|     Add index
|
* commit 05791aaa9acdcc8420ae8e61827ee1f41fbb45ff
  Author: Thinker young <x695@qq.com>
  Date:   Wed Mar 9 20:06:28 2016 +0800
      Frist commit
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)

#依次,再处理就可以了
$ git rebase -i HEAD~2
[detached HEAD f9bdd4c] Add feature-C
 Date: Fri Mar 11 20:18:43 2016 +0800
 1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/feature-C.
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)

$ git log --graph
* commit f9bdd4c3faaff82778a40e7beac165741d9c0aa4
| Author: Thinker young <x695@qq.com>
| Date:   Fri Mar 11 20:18:43 2016 +0800
|
|     Add feature-C
|
*   commit 0158cdfa04a60005b146786017a0d95b985afa84
|\  Merge: bc39e02 f6937f8
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 20:01:46 2016 +0800
| |
| |     Merage branch feature-B
| |
| * commit f6937f8dc33977d589a26d7a50c8c35d2eb0138f
| | Author: Thinker young <x695@qq.com>
| | Date:   Fri Mar 11 19:42:55 2016 +0800
| |
| |     Fix B
| |
* |   commit bc39e02e659481efad23e28cc893da33e4ad2283
|\ \  Merge: 478c9d6 1eff5aa
| |/  Author: Thinker young <x695@qq.com>
|/|   Date:   Fri Mar 11 18:37:04 2016 +0800
| |
| |       Merge branch 'feature-A'
| |
| * commit 1eff5aac5583332f40846edfffaee45e86c18d18
|/  Author: Thinker young <x695@qq.com>
|   Date:   Wed Mar 9 20:46:18 2016 +0800
|
|       Add feature-A
|
* commit 478c9d6a50b3d44e3c57d534b899242e2dbc2a8a
| Author: Thinker young <x695@qq.com>
| Date:   Wed Mar 9 20:29:28 2016 +0800
|
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)
$ cat READM.md
hello world !
#get some diff
        -feature-A
        -feature-B
        -feature-C
Administrator@YOUNG-PC MINGW64 ~/HelloWorld (feature-C)

#最后合并到master仓库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贤时间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值