美文网首页深入浅出git
深入浅出git(五)——自由的修改提交记录

深入浅出git(五)——自由的修改提交记录

作者: zy_think123 | 来源:发表于2019-02-02 12:21 被阅读0次

上篇文章讲了merge和rebase,我们已经可以在commit object构成的图(当然我更愿意把它看成一棵树)上面进行分支的合并了,在图上我们可以新增节点(git commit),合并节点(merge或者rebase),这篇我们就来讲解下移动和删除节点。

在讲移动和删除之前,我们先来认识下HEAD的分离。

分离的HEAD

我们都知道,HEAD是指向当前分支的,而分离的HEAD就是让其指向了某个具体的提交记录而不是分支名。

现在我本地的提交记录是这样的

git log

当我们执行git checkout 062704b1c3a814dfd95695aba3684c22e3f3fa85之后HEAD就处于分离状态。

分离HEAD 分离HEAD

移动节点

我们可以通过指定提交记录hash的方式移动指针的位置(无论是分支还是HEAD),然而实际中并没有那么直观的图给我们看,就不得不使用git log来查看提交记录的hash,然而hash又比较长,幸好git对hash的处理比较智能,我们只需要提供唯一标识提交记录的前几个字符就可以了,因此我们可以只输入git checkout 0627就可以检出提交记录了。

通过hash值来移动节点显然并不方便,所以git提供了相对引用,这样我们就可以从一个易于记忆的地方(比如bugFix分支或者HEAD)开始计算。

相对引用

相对引用很给力,常用的两种用法

  1. 使用^向上移动1个提交记录
  2. 使用~num向上移动多个提交记录
移动一个节点 移动多个节点

当我们执行git checkout master^的时候,我们的HEAD就指向了上一个提交记录(当前记录的是一个记录),注意这里移动的是提交记录(commit object),同理移动多个记录也是一样的。

使用相对引用最多的就是移动分支,我们可以命令直接让分支指向另外一个提交。

移动分支到指定节点

现在master分支就指向了第一个提交,需要注意的是不能在当前分支操作当前分支的移动,否则你会有这样的错误

fatal: Cannot force update the current branch.

完成移动之后并不会切换分支,仍然处于之前的分支。

任意移动

如何能将提交树的commit object任意的移动?让我们的修改可以更加的随意,git cherry-pick就能做到。
现在我们想把bugFix分支上C2,C4的提交记录移动到master分支上,只需要执行

git cherry-pick C2 C4

这个命令可以"复制"提交节点并在当前分支做一次完全一样的新提交

git cherry-pick

回退代码

有的时候我们的代码提交错了,但是已经提交到git上去了,我想要回退怎么办?还好git提供了两种方法用来撤销变更----git reset以及git revert

git reset

git reset通过把分支记录回退几个提交记录来实现撤销 改动,其实就是移动在图上的指针。

git reset

git revert

git revert

我们本来是要撤销C2提交的,但是为什么还多了一个C2'提交呢?这是因为新提交记录C2'引入了更改--这个更改又是用来撤销C2这个提交的,也就是说C2'的状态于C1是相同的。
revert之后就可以把更改push到远程仓库与别人分享了。

上面的文章你还可以在我的公众号--早晚程序员上看到哟


喜欢就关注我哟

相关文章

  • 深入浅出git(五)——自由的修改提交记录

    上篇文章讲了merge和rebase,我们已经可以在commit object构成的图(当然我更愿意把它看成一棵树...

  • git随笔

    git 常用操作 修改提交信息本地撤销修改记录git commit --amend通过此命令进入到提交信息界面,...

  • git command help

    Git命令 查看、添加、提交、删除、找回,重置修改文件 查看文件diff 查看提交记录 Git 本地分支管理 查看...

  • git 常用的命令

    修改提交得message 拿出某次提交内容 合并提交的merge信息 查看提交记录 撤销commit git di...

  • 《git权威指南笔记》

    修改提交说明 git commit --amend修改最新提交的提交说明 git rebase -i

  • 【重点】git在项目中常用命令

    git提交当前工作空间的修改内容并记录:git commit -m'text'查看仓库状态:git status暂...

  • git经常用到的操作

    提交当前工作空间的修改内容并记录:git commit -m'text' 查看仓库状态:git status 暂时...

  • Git命令-Linux下提交代码

    一、Linux 下 Git 提交代码的五个步骤 查看代码的修改状态 查看代码的修改内容 暂存需要提交的代码 提交已...

  • 修改 Git 已经提交记录的 用户名 和邮箱

    修改 Git 已经提交记录的 用户名 和邮箱 有关 Git 和版本控制的常见问题。 如何更改提交的作者姓名/电子邮...

  • GIT命令

    新建路径: git clone 提交修改: git add . 本地提交: git comm...

网友评论

    本文标题:深入浅出git(五)——自由的修改提交记录

    本文链接:https://www.haomeiwen.com/subject/wklssqtx.html