• Git命令


    【转载请注明出处】http://www.cnblogs.com/mashiqi

    2019/01/30

    一个学习Git的好网站,链接在此,另外这个链接是个练手版。

    对commit, branch, HEAD之个人理解

    • commit 是对project的一次快照,所以可以暂时不正确的理解为对当前project的一个“另存为”。但是git是比较智能的,它不会将所有内容都记录下来,而是只记录相对改变。比如说昨天是a,今天改成了b,那今天的commit记录的其实是b-a。
    • branch 其实就是一个指针而已,指向某个commit。
    • HEAD 也是一个指针,它可以指向branch(也就是指向一个指针,毕竟branch本身就是指针嘛),也可以直接指向某个commit。

    git commit

    提交一个commit

    git branch [newbranchName]

    在当前的commit上建立一个新的branch(分支)。分支即一个指向commit的指针。

    git tag [tagName] [commitName/branchName]

    在所指定的commit上加一个名字叫做tagName的锚点标签。

    git checkout [branchName]

    checkout的本意应该是带有离开的意思。但在git里面完全相反,命令git checkout branchA的意思是将HEAD指向branchA这个分支,如果这个branch所指向的commit的hash值是abc,那么当前的情况就是HEAD->branchA->abc;另外HEAD也可以直接指向某个commit,比如如果某个commit的hash值是abc的话,那么命令git checkout abc的意思就是将HEAD指向这个commit,即HEAD->abc。注意,在两个小例子里,HEAD分别是指向的branch和指向的commit,这是个细微区别。
    git checkout HEAD^的意思是将HEAD指向parent commit,如果有两个^那么就再向上移动一个parent,以此类推。可以用~4来代替^^^^,其他数字以此类推。

    git rebase [branchName]

    rebase的意思是将当前的HEAD->branch->commit作为一个新的commit建立在branchName下。假设此刻HEAD指向的是分支a,那么git rebase b的意思就是

    • 如果a就是b或者b是a的祖先:那么什么都不做
    • 如果a是b的祖先:则把b的值赋值给HEAD->a
    • 其他情况下:新建一个从b继承的commitcommit1,然后HEAD->a->commit1

    rebase命令还有交互模式git rebase -i [branchName],这里的-i就是interactive的意思。输入这个命令后,会出来选择框让你选择要将哪些commit以什么方式rebase到branchName下。

    git merge [即将被当前HEAD合并的branch的名字]

    如果是自己的历史branch被merge的话,那么自动将那个被merge的branch指向到 当前的HEAD所指向的branch

    git branch -f [a] [b]

    将分支a指向commit b

    git reset [branchName | commitHash]

    将当前HEAD所指向的branch重新指向到commitHash 或者branchName所指向的commit。

    git revert


    git fetch 与 git pull

    将remote端的那些“local端没有的数据”下载到local端,相当于同步。但是git fetch并不会使得当前的local branch的状态发生改变。而git pull命令等价于git fetch; git merge origin/master,也即是说不仅是同步,同步完了之后还要将当前HEAD指向的分支(比如说master)与最新的origin/master进行合并。另外,rebase命令也能实现和merge差不多的效果,git pull --rebase等价于git fetch; git rebase origin/master
    git pull origin master命令等价于git fetch origin master; git merge origin/master
    git fetch origin :foo表示在local端创建一个foo分支。

    git push

    将当前的分支推送到远端,并且使当前local端的origin/master自动checkout到当前的HEAD的位置。
    git push origin :foo表示在remote端把foo这个分支删除掉,这个是和push是相反的,需要注意。

  • 相关阅读:
    SQLite在iOS开发中的使用
    实现序列化和反序列化
    NSPredicate用于对集合类中的元素进行筛选
    通知中心NSNotification与委托的异同,需要注意的要点
    OC 重写description,isEqual方法
    iOs 单例模式的定义,实现、步骤
    Obejctiv-c 里面KVC 和 KVO的实现步骤,和有关方法
    关于NSTimer的几种构建方式
    NSTimer 实现到一个指定时间(年、月、日)的倒计时
    关于UILable、UIButton、UITextField简单运用
  • 原文地址:https://www.cnblogs.com/mashiqi/p/10337067.html
Copyright © 2020-2023  润新知