git学习整理笔记

最近get到一个不错的学习git基本操作的链接,不用看教程,可视化页面,动态更新的分支树,跟玩游戏一样,害挺好玩,记笔记也方便,安利给大家~游戏链接

本地篇

  1. git commit 提交至本地库

  2. 切换/创建分支
    - git branch xxx创建分支
    - git checkout xxx切换分支
    - git checkout -b xxx创建并切换至新分支

  3. 合并分支
    - git merge xxx将xxx合并至当前检出位置
    图为git merge bugFix
    git学习整理笔记_第1张图片
    - git rebase xxx继承xxx分支至当前检出位置
    图为git rebase master
    git学习整理笔记_第2张图片
    注意:提交记录 C3 依然存在(树上那个半透明的节点),而 C3’ 是我们 Rebase 到 master 分支上的 C3 的副本。

  4. HEAD
    HEAD 总是指向当前分支上最近一次提交记录,HEAD 通常情况下是指向分支名的。

    如果想看 HEAD 指向,可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向。

    git checkout xxx可以改变HEAD的指向(此处的xxx不仅可以是分支名,还可以是每次提交记录的哈希值)

    如果通过指定提交记录哈希值的方式在 Git 中移动不太方便(直接引用),不得不用 git log 来查查看提交记录的哈希值,这就有了相对引用。

  5. 相对引用
    - 使用 ^ 向上移动 1 个提交记录
    - 使用 ~ 向上移动多个提交记录,如 ~3

    可以将 HEAD 作为相对引用的参照,一直使用 HEAD^ 向上移动

    -f 容许我们将分支强制移动到那个位置
    git学习整理笔记_第3张图片
    使用 git branch -f master HEAD~3后:
    git学习整理笔记_第4张图片

  6. 撤销变更
    - git reset
    如下图,git reset HEAD~1把 master 分支移回到 C1;现在我们的本地代码库根本就不知道有 C2 这个提交了。在reset后, C2 所做的变更还在,但是处于未加入暂存区状态。
    git学习整理笔记_第5张图片
    git reset在本地分支中使用 很方便,但是这种方法对多人一起使用的远程分支是无效的,为了撤销更改并分享给别人,我们需要使用 git revert
    - git revert

    下图是使用git revert HEAD后的效果,奇怪!在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的。revert 之后就可以把你的更改推送到远程仓库与别人分享啦。
    git学习整理笔记_第6张图片

  7. git cherry-pick <提交号>...用来将一些提交复制到当前所在的位置(HEAD)下面

    如:git cherry-pick C2 C4,就把 side 分支上 C2 和 C4 的工作复制到 master 分支
    git学习整理笔记_第7张图片

  8. 与切换HEAD一样,我们常常是不知道每次提交记录的哈希值的,因此,我们需要用到交互式rebase。

    交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i,使用此命令Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明

    如下图,使用git rebase -i HEAD~4,就可以将倒数四个节点,按照你想要的顺序,生成一个新的分支,你也可以删除已选中的节点
    git学习整理笔记_第8张图片

  9. git标签(锚点)
    git tag tagName hashName如果你不指定提交记录,Git 会用 HEAD 所指向的位置

  10. git describe 描述离你最近的锚点

    可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)

    输出的结果: __g

    tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。当 ref 提交记录上有某个标签时,则只输出标签名称

    什么意思呢?
    git学习整理笔记_第9张图片
    git describe master会输出v1_2_gC2
    git describe side会输出V1_1_gC4

远程篇

  1. git clone在本地创建一个远程仓库的拷贝
    远程分支有一个命名规范 —— 它们的格式是:/。因此,如果你看到一个名为 o/master 的分支,那么这个分支就叫 master,远程仓库的名称就是 o。当你使用真正的 Git 时, 你的远程仓库默认为 origin!

  2. git fetch从远程仓库获取数据
    - 从远程仓库下载本地仓库中缺失的提交记录
    - 更新远程分支指针(如 o/master)
    - git fetch只会抓取更新,但它不会自动更新你的 master 分支,也不会修改你磁盘上的文件,你需要执行git cherry-pick o/mastergit rebase o/mastergit merge o/master来更新本地分支、代码、文件。

  3. git pull
    git fetchgit merge o/master的语法糖

  4. git pull --rebase
    git fetchgit rebase o/master的语法糖

  5. git push
    负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成果了!

    notice!git push 不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关。它的默认值取决于你正使用的 Git 的版本。

  6. Remote Rejected
    master分支被锁定,远程服务器拒绝直接推送(push)提交到master,因为策略配置要求 pull requests 来提交更新。
    解决办法
    新建一个分支feature, 推送到远程服务器。然后reset你的master分支和远程服务器保持一致, 否则下次你pull并且他人的提交和你冲突的时候就会有问题。

  7. 远程跟踪分支
    除了master,你可以让任意分支跟踪 o/master, 然后该分支会像 master 分支一样得到隐含的 push 目的地以及 merge 的目标。

    有两种方法设置这个属性,
    git checkout -b foo o/master 通过远程分支检出一个新的分支,这就可以创建一个名为foo 的分支,它跟踪远程分支 o/master

    git branch -u o/master foo 设置远程追踪分支,这样 foo 就会跟踪 o/master 了。如果当前就在 foo 分支上, 还可以省略 foogit branch -u o/master

  8. git push
    是远程仓库名,一般是origin
    同时指定了提交记录的来源和去向,当二者一致时,写一个即可;当二者不同时,git push origin :,place的值可以是任何git可以识别位置的名词(如分支名、HEAD~1)

  9. git fetch 与push的参数基本一致,只是源和目的对调了,因为通信方向变了。

    NOTICE! 当我们把source置空时,即git push origin :master会删除远程的master分支,同理,git fecth origin :bar会在本地新建一个名为bar的空分支。

还有一些组合式应用,请移步至游戏链接亲身体会!它值得你拥有!
提供一些有用的游戏命令,也许你会用到:
reset 重置
undo 回退
levels 显示关卡菜单
show solution 查看答案

你可能感兴趣的:(工具篇)