美文网首页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