Git 高级

1 核心

一切皆引用

2 HEAD的本质

当前commit的引用

3 branch的本质

1  commit 的串儿的引用
2  branch包含从初始commit 到当前commit的所有路径。所以branch也是commit的引用。
3  切换分支也就是切换引用。
4  删除分支也就是删除commits

分支合并流程图

在这里插入图片描述

4 checkout的本质

checkout 的本质是签出指定的 commit,
所以你不止可以切换 branch,
也可以直接指定 commit 作为参数,
来把 HEAD 移动到指定的 commit。

应用1:

如上图 ( 分支合并流程图 ) 所示,分支合并之后,如何复制一份原来的master分支呢?

Step 1
git  checkout   < commit D >  
显示
Note: checking out 'ecc98f00bc43638e4200d3dde9284caf5b39860b'.

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>

此时 .git/HEAD 文件的内容为 ecc98f00bc43638e4200d3dde9284caf5b39860b
也就是当前checkout 的 commit

Step 2 使用一个分支将这个commits串儿保存起来
git checkout -b oldmaster
这样未合并之前的master分支就被保存了下来
过程如图所示

在这里插入图片描述

5 tag的本质

参考branch

6 交互式rebase

git rebase -i HEAD^
git rebase -i commitID
本质:  基于分支的变基 和 基于commit的变基本质相同。

7 revert 把写错的 commit 撤销。

git revert <commit-ID>

8 找回删除的分支

git reflog
git checkout <reflog-Id>
git checkout -b <newBranchName>

参考

git --help

git command --help

参考书籍 《Git Pro》《Git 权威指南》

Git 官方文档

猜你喜欢

转载自blog.csdn.net/songyuequan/article/details/82933321