文件目前所在的分支master怎么改为main_git commit/checkout/merge/rebase/branch/revert 怎么用...

62e2a770e83f667ee42b49e81ef04f14.png

内容首发

乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech

用代码理解分析解决金融问题


不知道大家有没有这样的经历,不过小管家在写东西的时候,会有非常多的版本

56fa806bfd9b74a05534d7c45919bcf2.png

这种命名方式非常不好,而且在团队协作中很容易出错。

而且容易打脸。。。

f9849995770ed61e5a67bba0400c2b5d.png

cc12f20c375800773f4e696a5ee0e80d.png

7569c6d73b601d22ce4b05b8ca0bddd0.png

在经过数次毒打之后,

小管家痛定思痛,决定系统的学习版本控制工具git。

979ad64c02e562a06f9b7dae985c51e8.png

不需要反复创建新文件,通过git跟踪文件夹下的文件,这样每次改动后进行一次提交,可以直接回滚到任何版本,非常方便~

所以今天小管家跟大家分享一个版本控制工具git与其常见操作,每个操作都有相关代码命令与图示,内容较多,建议可以收藏起来慢慢看~

欢迎“分享”,“喜欢”,“收藏”三连,爱你们~

0.git commit进行版本提交

fdcea2acc30490cb38c5cad75be8adfc.png

一次git commit提交版本

git commit

9d973c0302a8a9109b8826b6ce024eeb.png

1.git branch创建分支

723d8309ac13639ae96883d4c8896d30.png

创建newImage分支

git branch newImage

723d8309ac13639ae96883d4c8896d30.png

提交新branch分支

git commit

0b138fcea32dd9768ac0d4bcc909c364.png

这里注意到newImage并没有动,master到下面去了,这证明我们并未切换到newImage这个分支上

在git中,*这个符号代表你现在所在的分支。

于是我们需要——

2.git checkout 切换分支

如果我们目前在master分支,情况如下图:

0b138fcea32dd9768ac0d4bcc909c364.png

我们现在需要切换到newImage分支,所以可以

git checkout newImage
git commit

186c3ab54c1fca6db5ec3fd681e1c14d.png

我们就会发现newImage已经到下方了,而且*这个符号正在newImage上面,也就是说目前我们在的分支是newImage。

3.git checkout -b 一次性搞定创建与切换分支

如果你觉得以上创建与切换的方法太麻烦,这里介绍一个小技巧可以一次性搞定

比如目前是

af6068da0da85740f9fffecbecc84e32.png

我们想创建一个bugFix的分支并且切换到bugFix分支上去,可以直接通过

git checkout -b bugFix

efc92c2395fded7d29f4e335ab90cb1a.png

这样我们在bugFix这个分支里面到代码如果写完后,就可以直接提交了

git commit

d5a765bf767c814e9dde794bad9dab67.png

这种操作在实际开发中用的非常多,比如程序出现了一个Bug,但是这个Bug并不严重,你可以新开一个bugFix分支进行各种优化与修改,这些修改并不影响整体到master主干代码。

那么如果这个bug修补好了,接下来我们就可以——

4.git merge 合并分支

假设一个这样的情况:我们现在想把已经完成修改的bugFix合并到master

d5a765bf767c814e9dde794bad9dab67.png

我们可以输入

git merge bugFix

7f98ce6e6149570011f9735626775560.png

我们可以看到我们现在所在的C4(master*)同时指向了C2(bugFix分支)与C3(原先的master分支),C2与C3又同时指向了C1,C1又指向了C0(也就是最开始的root),也就是说目前的C4(master*)包含了这个repo仓库里面所有的内容了。

当然,我们这种分支合并是比较常见的,但是我们还可以这样做——

5.把master内容合并到分支里面

比如说我们目前是这样的情况

b1d3a062feb173eaa39d65bb5051465b.png

我们不想用master作为我们的主干,我们想直接在bugFix上继续开发,但是需要合并master里面所有的内容,我们可以反过来把master里的内容合并到bugFix分支里面

git checkout bugFix
git merge master

4ca829d4d51338651fd2de9675746e7c.png

注意到这里bugFix其实是master的上一次提交,所以我们如果合并直接就把bugFix与目前master提交的所有内容合并,一次提交就可以了~

当然,不仅仅只有这么一种合并分支的方法,我们接下来看看一个更加简洁清晰的合并方法——

6.git rebase 变基合并

比如我们现在假设面临这样的情况:

dc010034e2293b22ca389740fa58e03a.png

注意到我们现在所在的分支是正在解决bug的分支bugFix,我们现在想把目前修复的bug的所有代码合并到主干master分支里面。

我们如果使用

git rebase master

5af3883122bfe8a5ab94cfd7d5ba5916.png

注意到我们目前还是在bugFix分支上,我们需要checkout 到master主干分支上

git checkout master

de173d0466d14ec1c587a8d134f94dc1.png

这个时候我们就可以使用rebase了

git rebase bugFix

f5dd140204bc8f0810661e4cdd9d1652.png

这样我们如果从C3‘往上溯源,有

C3'——>C2——>C1——>C0

这样思路就非常清晰,查看git 历史的时候也可以以线形的思维来整理思路,比较不容易晕掉。

OK,那我们继续看一下更加复杂的git知识点——

8.check out 与 HEAD

我们再来看一个新概念HEAD,HEAD意味着是头部,目前可以简单理解成我们正处于的开发的最新的版本内容。也就是说如果我目前正在C2,如果输入

git checkout C2

75e2ba523a90d946109cb61e71251679.png

我们把这个问题化简,假设我们只有一个commit

68538cd41314d1294e9ddfe7bf96a6ab.png

目前的逻辑关系是

HEAD -> master -> C1

但是我们可以Detaching我们的HEAD

我们输入

git checkout C1

ace4adced99ebab3b0232677ff567cd0.png

也就是逻辑关系变成了

HEAD -> C1

9.通过相对位置^在git树状结构中移动

那么我们既然能够理解HEAD这个概念,我们现在就可以在整个git树状结构中进行任意移动,并且可以任意改变HEAD的位置了。

一种比较好的移动方式就是通过相对位置进行移动。比如我们假设遇到一个这样的问题:

153b93499d5683ae902b64e156e1e85b.png

我们想向上移动,可以使用^

我们输入

git checkout master^

这样我们的HEAD就跳到了上一层级

26f3adb4f05bbf9d6d7b67831bb60065.png

那么我们如果要实现多层级跳转怎么办?

比如我们需要直接跳转到C0

7a3bec339d7eb19725d91b32f84a85e3.png

我们可以连续输入

git checkout C3
git checkout HEAD^
git checkout HEAD^
git checkout HEAD^

这样就跳转到了最上面的C0

e67ff486eaa5bbc00bde1afc08e7147a.png

10.实际操作中用的较多的强制跳转git branch -f

我们在实际操作过程中可以直接使用git branch -f进行强制跳转,比如

ad049af2f1b7710d387f36bcd1604f55.png

我们假设想向上跳转三个到C1,可以输入

git branch -f master HEAD~3

126dad8b312a86c5d3c56b271062aa19.png

这样我们就可以将master强制向上移动三个层级到C1了。

11.git reset重写历史

如果我们能够自由的选择git中的各个版本,我们就可以任意选择一个版本开始“重写历史”了,谁说没有“后悔药”,git在手,我们可以回滚到任意版本。

比如说我们假设处于这样一个场景,但是想回滚上一个版本:

b2b0d4bb523bfe400980b94e26e6b4cf.png

可以输入:

git reset HEAD~1

e5237caddde3a6feb6a0ec5140e98904.png

12.如果涉及到远程仓库,使用git revert

虽然git reset非常好用,但是这个命令仅仅在本地的仓库才有效。很多时候我们是在github上有远程仓库,这个时候我们就需要用到git revert命令:

92a06951cca52fac172f4302e4cf1403.png

因为涉及到远程仓库,我们不仅仅是需要revert改变,还需要将改变分享给其他用户,所以我们使用命令:

git revert HEAD

d2b053228a6058bac4f4db4a0dfe7a53.png

我们把这个用法通过一个实际的例子来理解:

4ab6df83ae592e768a620e32a80bfedc.png

假设现在咱们想回滚一个版本,并且push到远程仓库

我们可以先输入:

git reset local~1

a14701c8feec86e9726f1611d3f6f8d6.png

接着我们进行pushed远程仓库的操作

git checkout pushed

我们可以将远程的版本也进行回滚

git revert pushed

9466386ae442d9524ed3896ad8477f30.png

这样我们就掌握了日常使用的80-90%的git相关的操作与原理。在接下来的推送中,我们会继续跟大家分享更加进阶的git操作~

首发

乐学偶得 公众号: 乐学Fintech

用代码理解分析解决金融问题

8d0600a7067e365a25bf9325826af2d1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值