如何克服解决Git冲突的恐惧症?(Git高级篇)

发表于:2018-4-04 14:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Absintheme    来源:博客园

  HEAD是一个对当前检出记录的符号引用,也就是指向你正在其基础上进行工作的提交记录。
  HEAD总是指向当前分支上最近一次提交记录。大多数修改提交树的Git命令都是从改变HEAD的指向开始的。
  我们可以通过下面这张图来理解:
  HEAD->master->C1,HEAD指向master, master指向C1
  HEAD通常情况下是指向分支名的(如bugFix)。在你提交时,改变了 bugFix的状态,这一变化通过HEAD变得可见。
  如果想看HEAD指向,可以通过cat .git/HEAD查看,如果HEAD指向的是一个引用,还可以用git symbolic-ref HEAD查看它的指向。
  分离HEAD
  分离的HEAD就是让其指向了某个具体的提交记录而不是分支名。
  当我们执行 git checkout C4 命令时,效果如下gif图所示:
  使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。
  相对引用
  相对引用非常给力,这里我介绍两个简单的用法:
  · 使用 ^ 向上移动1个提交记录
  · 使用 ~<num> 向上移动多个提交记录,如 ~3
  相对引用(^)
  把操作符(^)加在引用名称的后面,表示让Git寻找指定提交记录的父提交。
  所以, master^ 相当于“master的父节点”, master^^ 是master的第二个父节点。
  执行 git checkout master^ ,具体效果如下gif所示:
  相对引用(~)
  如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git当然也考虑到了这一点,于是又引入了操作符 ~ 。
  该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同 ,向上移动一次),指定向上移动多少次。
  执行 git checkout master~2 ,具体效果如下gif所示:
  撤销变更
  在Git里撤销变更的方法很多。和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。
  主要有两种方法用来撤销变更:
  · git reset
  · git revert。
  接下来咱们逐个进行讲解:
  git reset
  git reset通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
  虽然在你的本地分支中使用git reset很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!
  执行 git reset master^ ,具体效果如下gif所示:
  git revert
  为了撤销更改并分享给别人,我们需要使用git revert。
  执行 git revert master^ ,具体效果如下gif所示:
  奇怪!在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录C2'引入了更改,这些更改刚好是用来撤销C2这个提交的。也就是说C2'的状态与C1是相同的。
  revert之后就可以把你的更改推送到远程仓库与别人分享啦。
  相信大家对git的高级篇已经基本掌握,不妨在自己的git环境中动手试一试吧~

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号