Git控制语句模拟Git流提交

git模拟器网址

初始效果:
初始状态

  1. 提交:commit
git commit

效果:箭头指向从c2到了c1
多出了一个c2节点

  1. 新建一个分支:branch
git branch bugFix

效果:master下多了一个bugFix分支
新增bugFix分支

  • 此时我们试着使用commit提交一下当前分支
git branch bugFix
git commit

提取的是master分支
我们想要使用新建的bugFix分支,但是为什么把master提取了出来呢,因为之前新建bugFix的时候没有把当前分支定位到新建的bugFix上

  • 我们可以使用checkout来把指针指向想要的分支
git branch bugFix
git checkout bugFix
git commit

指针在bugFix分支上时提交即可
当使用checkout定向到bugFix后,我们就可以使用commit来提交分支了

  1. 分支的合并一:merge
git branch bugFix
git checkout bugFix
git commit
git checkout master
git commit
git merge bugFix

新建的bugFix合并到了当前的master分支中
要注意,我们在合并的时候分支一定是要检出到目标分支,然后指令输入我们需要合并的分支,如果我们指针恰好就在目标分支上,则无法进行合并(自己和自己无法合并):
当前分支时无法提交

  1. 分支的合并二:rebase
git branch bugFix
git checkout bugFix
git commit
git checkout master
git commit
git checkout bugFix
git rebase master

bugFix分支里的工作直接移到 master 分支上
此时两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的。咱们就可以用 git rebase 实现此目标(此时原来的c2分支没有消失,只是变透明了)
现在唯一的问题就是 master 还没有更新,下面咱们就来更新它吧……

git branch bugFix
git checkout bugFix
git commit
git checkout master
git commit
git checkout bugFix
git rebase master
git checkout master
git rebase bugFix

master分支也已被更新
现在我们就得到了最新的master分支。由于 bugFix 继承自 master,所以 Git 只是简单的把 master 分支的引用向前移动了一下而已。

  1. 分离:HEAD
    HEAD是一个对当前检出记录的符号引用
git checkout c1

定位到c1记录而不是master分支
分离的head就是我们使用checkout的时候定位的是某个具体的提交记录而不是分支(个人理解和意义类似,只不过有时候HEAD可以使用命令行,而无法在命令行中体现)
head -> master -> C1变成head -> C1

  1. 相对引用:^、~
    ^是让 Git 寻找指定提交记录的父提交。(退一步)
git commit
git checkout master^

向上移动了 1 个提交记录
如果想在提交树上移动很多步的话,敲很多次^会很麻烦,这时就可以使用~可以在提交树上移动很多步

git commit
git commit
git commit
git checkout HEAD~4

直接后退4步,回到了c0节点
有时候分支建立多了想要退回到之前的分支上时即可使用强制分支移动到目标位置

git branch -f bugFix HEAD~3

bugFix直接退回3步
此处bugFix为想要退回的分支,之后直接使用HEAD~(想要退回的步数)即可退回

  1. 小练习
    我们现在初始化一下初始效果
git branch bugFix
git commit
git checkout bugFix
git commit
git checkout master
git commit
git checkout bugFix
git commit
git commit
git branch -f bugFix HEAD~1
git checkout c2

初始效果
目标效果:
目标效果
如何实现呢,命令如下:

git checkout master
git rebase c6

分支效果和要求一致
接下来继续输入退步的命令行即可

git branch -f master HEAD~2
git branch -f bugFix HEAD~4
git checkout c1

完成

  1. 撤销变更:reset、revert
    reset 通过把分支记录回退几个提交记录来实现撤销改动。可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
    我们先把节点提交一次
git commit

此时想要插销一步commit的话即可使用git reset

git commit
git reset HEAD~1

撤销一步commit
虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对多人一起使用的远程分支是无效的哦!为了撤销更改并分享给别人,我们需要使用 git revert。
同样提交一次commit初始分支节点,如果想要在公共分支上想要撤回则需要输入:

git commit
git revert HEAD

撤销一步commit
为何这段指令不仅没有撤销反而,在我们要撤销的提交记录后面居然多了一个新提交?
这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值