Git分支命令学习

Git Rebase

取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。

Rebase 的优势就是可以创造更线性的提交历史

演示例子

准备两个分支,master与bugFix,目的就是将bugFix的分支直接移到mater分支,看起来像顺序开发,实际上是并行开发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4BtFStaP-1574243943588)(D:\md笔记\1574233727897.png)]

  1. 新建分支bugFix:

    $git branch bugFix
    
  2. 切换分支bugFix,提交到版本库中

    $git checkout bugFix;git commit
    
  3. 切换分支master,提交到版本库中

  4. 切换回bugFix

    $git checkout bugFix
    
  5. 把分支移到master

    $git rebase master
    

在这里插入图片描述

Git之在提交树上移动

HEAD

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。

HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

bugFix 分支中分离出 HEAD 并让其指向一个提交记录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZEC05gg5-1574243943600)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\1574235944677.png)]

$git checkout c4

在这里插入图片描述### 相对引用

通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,所以你就不得不用 git log 来查查看提交记录的哈希值。需要提供能够唯一标识提交记录的前几个字符即可。所以通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。使用相对引用的话,便可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。

  1. 操作符 ^。加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交。 比如 master^ 相当于“master 的父节点”。master^^master 的第二个父节点

在这里插入图片描述

$git checkout bugFix^
~操作符

操作符 ~可以在在提交树中向上移动很多步。该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。

“~”操作符

如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~

该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。咱们还是通过实际操作看一下吧

** 一次后退四步。**

$git checkout HEAD~4

强制修改分支位置

你现在是相对引用的专家了,现在用它来做点实际事情。

我使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。例如:

git branch -f master HEAD~3

上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。

撤销变更

撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。

git reset

通过把分支记录回退几个提交记录来实现撤销改动。可以想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。

在这里插入图片描述

Git 把 master 分支移回到 C1;现在本地代码库根本就不知道有 C2 这个提交了 第三方的

git revert

为了撤销更改并分享给别人,需要使用 git revert。来看演示:

运用例子

在这里插入图片描述

$ git reset HEAD~

$ git checkout pushed

$ git revert HEAD

在这里插入图片描述

自由修改提交树

整理提交记录

git cherry-pick

命令形式为:

  • git cherry-pick <提交号>...

将一些提交复制到当前所在的位置(HEAD)下面的话,例子:

$git cherry-pick c2 c4

表示将提交的记录C2与c4 复制到当前分支

交互式的 rebase

不清楚想要的提交记录的哈希值,可以利用交互式的 rebase —— 从一系列的提交记录中找到想要的记录。交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i,如果命令后增加了此选项, 将会打开UI界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于理解这个提交进行了哪些更改。

当 rebase UI界面打开, 可以做3件事:

  • 调整提交记录的顺序(通过鼠标拖放来完成)
  • 删除你不想要的提交(通过切换 pick 的状态来完成,关闭就意味着你不想要这个提交记录)
  • 合并提交。 遗憾的是由于某种逻辑的原因,我们的课程不支持此功能,因此我不会详细介绍这个操作。简而言之,它允许你把多个提交记录合并成一个。
$git rebase -i HEAD~4

在当前节点前4个进行进行进行交互式提交修改

Git 技术、技巧与贴士大集合

本地栈式提交

只要让 Git 复制解决问题的那一个提交记录就可以了。

  • git rebase -i
  • git cherry-pick

提交的技巧

之前在 newImage 分支上进行了一次提交,然后又基于它创建了 caption 分支,然后又提交了一次。此时想对的某个以前的提交记录进行一些小小的调整。比如设计师想修改一下 newImage 中图片的分辨率,尽管那个提交记录并不是最新的了。

可以采取的方法:

  • 先用 git rebase -i 将提交重新排序,然后把我们想要修改的提交记录挪到最前
  • 然后用 commit --amend 来进行一些小修改
  • 接着再用 git rebase -i 来将他们调回原来的顺序
  • 最后我们把 master 移到修改的最前端(用你自己喜欢的方法),就大功告成啦!

的了。

可以采取的方法:

  • 先用 git rebase -i 将提交重新排序,然后把我们想要修改的提交记录挪到最前
  • 然后用 commit --amend 来进行一些小修改
  • 接着再用 git rebase -i 来将他们调回原来的顺序
  • 最后我们把 master 移到修改的最前端(用你自己喜欢的方法),就大功告成啦!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值