Git详解

1、提交:
git commit 
git commit 

最终,master 指向C3,如下图所示:
在这里插入图片描述

2、新建分支:

创建一个名为newImage的分支,树形结构变为:

git branch newImage

在这里插入图片描述
现在往新建的分支中提交一次记录:

git checkout newImage
git commit

状态变化:
在这里插入图片描述

3、分支与合并:

在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”,对应两种方式:
1) git merge
bugFix 合并到 master 上:
在这里插入图片描述
从图上可以看出,当新建一个分支的时候,并不会出现分支,只有当master和bugFix分支都有自己修改并进行提交了后,才会在新建分支节点(C1)出现分支
另外,git merge branch-name: 将branch-name分支修改合并到当前分支(master),bugFix分支不会变动
2) git rebase
Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。Rebase 的优势就是可以创造更线性的提交历史。
在这里插入图片描述
在执行完:git rebase master 后,分支变成了一个更线性的结构,提交记录C3 依然存在,C3’ ** 是我们rebase 到master 分支上C3的副本,而master是还没更新的。(将bugFix rebase 到master 分支上,将master 修改合并到当前分支)
切换到主分支,然后将master 分支更新到最只需要:git rebase bugFix(将master分支rebase到bugFix,将bugFix分支修改合并到master分支) 就可以同步了。由于
BugFix 继承master,所以Git只需要简单的把master 分支的引用向前移动到bugFix就行,无需在复制**。

总结:

  • 无论使用哪种方式,含义:git rebase/merge branch-name 都是合并分支,只不过两者树形结构不一致,git reabse branch-x: 是将当前分支合并到branch-x上,branc-x指向不变,当前分支会指向合并的最新位置 git rebase 更加线性点;git merge branch-x: 是将branch -x合并到当前分支,当前分支指向合并的最新位置,branch-x指向位置不改变。 这两者从树形结构上看刚好相反
4、在提交树上移动:

HEAD: 是一个对当前检出记录的符号引用 ---- 也就是指向你正在其基础上进行工作的提交记录。其总是指向当前分支上最近一次提交记录。 大多数修改提交树的Git命令都是从修改HEAD的指向开始的。HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

cat .git/HEAD  # 查看HEAD的指向 引用或者Commit ID
git symbolic-ref HEAD  # 若上面查出的是指向引用(分支名),还可以使用此命令指向的Commit ID

1) 分离HEAD:
在这里插入图片描述
2) 相对引用:
通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。这个就很厉害了!,介绍以下两种方式:
a 使用^向上移动1个提交记录
在这里插入图片描述
b 使用~<num>向上移动多个提交记录,如~3
在这里插入图片描述
3) 强制修改分支位置:

git branch -f 分支名 HEAD~x   # 强制将master指向HEAD的前x次提交最初位置。

在这里插入图片描述
4) 撤销变更:
方式很多,这里主要介绍两种:
a、 git reset
  通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样(重置一样,本地仓库是没有C2这条记录的,但是C2所做的变更还在,只是处于未加入暂存区状态,远程不影响)。(适合本地个人分支
在这里插入图片描述
b、git revert
  虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!为了撤销更改并分享给别人,我们需要使用 git revert。来看演示:
在这里插入图片描述
NOTE: 在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的。(适合远程分支)
4) 整理提交分支:

1、git cherry-picj <提交号>....  # 将一些提交复制到当前所在的位置(HEAD)下面;

在这里插入图片描述

2、git rebase -i (--interactive) HEAD~x # 相当于打开一个UI截面,可以做三件事:
	> 调整提交记录的顺序(通过鼠标拖放来完成)
	>  删除你不想要的提交(通过切换 pick 的状态来完成,关闭就意味着你不想要这个提交记录)
	>  合并提交。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值