Git 进阶用法
type
Post
status
Published
date
Dec 30, 2021
slug
gitAdvance
summary
来源:原创
tags
Git
category
码农
icon
password
Git 高级应用
为了演示效果,我先创建了一个
Git
仓库,名为 gitWork
。下图为该仓库的当前提交状态及分支情况:
- 项目展示
- 分支展示
master
分支展示
dev
分支展示
- 项目图展示(虚线为
git rebase master
后的结果)
下面所有的讲述均已此仓库为实例。
git rebase
git rebase
命令执行结果(文件内容)和 git merge
一致,但是过程存在一些差别。在
dev
分支中执行 git rebase master
,表示以 master
分支为 base
,将 dev
分支中的与 master
分支交汇节点(58381b)之后的所有节点一个一个的放到 master
分支中。效果参考上述项目展示图。
值得注意的是:
rebase
并不是直接将节点移动,而是在 master
分支创建了另外的两个节点,这两个节点与 dev
上的两个节点内容一致(废话,不一致的话,谁动了我的代码!!!)。同
merge
一样,rebase
过程发生冲突的话,就请各位大佬自行解决一下。切记不要将有远程分支的本地分支(如 origin/master->master)rebase 到与其有分叉的其他分支,会导致重复提交。因为rebase
后的分叉节点commint hash
和 远程commit hash
不是同一个值。rebase
后git
会要求你重新pull
远程commit
,那么项目结构中就会存在rebase
前和rebase
后的重复分叉节点。
git bisect
假设在节点 f1cdc8 中埋了个 bug,直到节点 c68c4c 才暴露出来,为了揪出节点 f1cdc8,
git bisect
就派上用场了。- 第一步:我确认节点 58381b 是没问题的,记为 good;节点 c68c4c 是有问题的,记为 bad。
- 第二步:
git bisect start c68c4c 58381b
开始查找问题节点。
- 第三步:二分法查找,标记跳动节点是 bad or good。
- 第四步:找到问题节点 f1cdc8。
- 第五步:
git bisect reset
退出流程。
git blame
当我们阅读团队中别人的代码时,有时候会对某一块代码疑惑不解,但是我不知道这是团队中哪位大佬写的啊,总不能一个一个问吧?
例如我想知道 test.txt 文件中的 "say master hello" 是谁写的?
执行
git blame test.txt
,就可以看到如下信息了:git reflog
讲
git reflog
之前,先介绍一下 git
中的 HEAD
和 branch
。HEAD 和 branch 可以类同理解为 C 语言中的指针。branch
指针指向某个节点,HEAD
既可以指向 branch
,也可以指向节点。git checkout
命令负责切换 HEAD
指针的指向。接下来讲
git reflog
指令就会好理解很多,该指令会显示 HEAD
指针的所有走向记录,包含那些已经不需要的节点或分支记录。git reflog dev
查看 dev
分支上的所有 HEAD
走向记录: