美文网首页Git
git小白非常适合的一个练习

git小白非常适合的一个练习

作者: 进击的前端 | 来源:发表于2017-08-14 17:52 被阅读657次

说来惭愧,以前弄git,老是焦头烂额,后来某只人肉wiki介绍了一个网站,http://learngitbranching.js.org/,发现简直是git小白的福音。

原来一直都是看各种git介绍的文章似懂非懂,真正用的时候脑子也转不过弯来。这个网站的好处是你可以尽情地练习~

前提条件是知道git add和git commit,git add 是把文件放到暂存区,而git commit是把文件从暂存区到仓库

下面的内容是我学习的笔记。

git commit

某个同学说,你就把git记录看成无数的commit,然后branch相当于指针,git就相当于commit们和指向它的指针们,后来想想觉得挺有道理的

我平时提交的时候,都是这样提交的

git commit -m "message"

这个游戏里面简化掉了

git commit

然后蓝色背景的表示初始状态,红色的表示要达成的目标
比如第一关,红色背景比蓝色北京多了两个结点,所以我们就执行两次commit


还有一个是当前指针指向,git一定会有一个当前指针,

git branch

branch理解为git的分支,就是在一个commit上面有两个指针,为啥总觉得像一条路有了岔路口
创建新分支有两种方式,比如创建newBranchName的分支

git branch newBranchName
git checkout newBranchName

第一行是创建新分支,第二行是把当前指针指向新分支
它们可以用一行解决

git checkout -b newBranchName

在新的指针上面继续commit,就相当于开了一条新路

git merge

开完新路之后可以合并,合并的一种方式是git merge

图3

如上图所示,如果我们master分支想要合并bugFix的提交,那么可以

git merge bugFix

然后你就发现master这里新建了一个提交,这个提交又是bugFix的下一个提交,又是master的下一个提交


git rebase

git merge在很多分支的时候,会导致分支很乱,而第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
如下图,

image.png

如果用rebase合并的话

git rebase master

结果如下图


关于rebase,我的理解是将一个分支放到另外一个分支下面,其实rebase后面是带两个参数的

git rebase branch1 branch2

然后他们的分支就会按照,branch1,branch2的顺序排列,如果branch2省略,那么就指代当前分支。如上面的例子, git rebase master,此时指针在bugFix后面,所以最终的结果是master在前,bugFix在后。

HEAD

有的时候会提醒分离的HEAD,其实HEAD是当前的指向,它可以指向提交,也可以指向分支。
如下图,如果用git checkout C1的话,HEAD就从分支master脱离。原来HEAD指向master的时候,master指向C1, 所以它本质是指向C1的。

^和~

如果我们想要HEAD指向当前提交的上一个提交

比如说现在我们的HEAD指向了master,我们想要指向C1,那么

git checkout master^

就会变成

image.png

当然我们用

git checkout HEAD^

也能做到
如果我们想向前几个分支,那么可以使用~,比如向前移动两个分支

git checkout HEAD~2

git branch -f

有的时候我们想移动分支,那么就用到git branch -f了,它允许我们强制移动分支。
具体用法是

git branch -f branchName Location

比如我们想让master分支移动到HEAD指向的上一个提交。

git branch -f master HEAD^

有了这个命令以后,我们就可以让分支的指向自由移动了~
因此把



变成

相信也不难吧~

git checkout HEAD^
git branch -f master C6
git branch -f bugFix C0

get reset和git revert

他们都是用来撤销commit,不同的是,git reset适合本地的,而git revert适合远程的,也就是说如果 git reset适用于并没有同步到远程的commit,
比如,回退一个提交

git reset HEAD~1

reset以后,当前分支指针指向的就是你reset的时候提交的
你还可以通过传入这些标记来修改你的缓存区或工作目录:

--soft – 缓存区和工作目录都不会被改变
--mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
--hard – 缓存区和工作目录都同步到你指定的提交

而利用revert

git revert HEAD~1

git cherry-pick

cherry-pick能够将其他分支的提交复制到当前分支下面
比如下图



我们希望
只把side分支的C2和C4提交合并到master

git cherry-pick C2 C4

得到


交互式git rebase

当你想要改变当前分支的提交的时候,这个可以做到,比如说你想更改最近三个提交,那么

git rebase -i HEAD~3

然后再文本编辑器编辑就好了

相关文章

网友评论

    本文标题:git小白非常适合的一个练习

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