飞雪连天射白鹿,笑书神侠倚碧鸳

0%

一个可视化的git命令学习网站

不用再纠结git命令不会写了

learn-git-branching ,so easy

以下仅为个人记录


commit

  • 提交 git commit -m “”

checkout

  • 创建新分支 git checkout -b feature

log

  • 查看 hash 记录 git log

合并分支

  • 创建新节点 git merge feature

  • 线性提交历史 git rebase master

  • HEAD,指向当前分支上的最近提交记录
  • 分离 HEAD,是指向某个具体提交而不是分支名
    • git checkout ‘hash’ 指向某次提交即可分离 HEAD

相对引用

  • ^符号移动一步

    • git checkout master^
    • git checkout HEAD^
  • ~符号移动多步

    • git checkout HEAD~2
  • 移动分支,当前分支指向另一个提交

    • git branch -f master HEAD~3
    • git branch -f feature #hash

撤销变更

  • git reset

    • git reset HEAD~1,变更还在,但是处于未加入暂存区状态
  • git revert

    • git revert HEAD,产生新节点 C,用于标识撤销的节点 B,内容和节点 A 一致

整理提交记录

  • 当知道所需要的提交记录(并且还知道这些提交记录的哈希值)
  • git cherry-pick #hash 将一些提交复制到当前所在的位置(HEAD)下面
    • git cherry-pick C2 C4,在当前分支上,把其他的分支内容拿过来

交互式rebase

  • 不清楚想要的提交记录的哈希值
  • rebase -interactive,简写为 -i,打开一个 ui 框操作(文本框)
  • git rebase -i HEAD~4

本地栈式提交

  • 开发调试时添加了打印语句,不需要这些项
  • 让 Git 复制解决问题的那一个提交记录,git rebase -i 或 git cherry-pick
  • 本地 master-bug-console-bugfix,4 个节点
    • 方法 1:git rebase -i HEAD~3 & git checkout master & git merge bugFix 删除中间项后 merge
    • 方法 2:git checkout master & git cherry-pick bugfix 直接把 bugfix 节点转移

提交的技巧

分支 1 提交后,基于最新提交创建分支 2,再次提交,想修改分支 1 的提交记录中的内容(移动想要修改的到最前面),但可能存在 rebase 导致的冲突

  • 先用 git rebase -i 将提交重新排序,然后把我们想要修改的提交记录挪到最前
    • 再 commit –amend 来进行一些小修改
    • 再 git rebase -i 来将他们调回原来的顺序
    • 最后 master 移到修改的最前端
  • git rebase -i HEAD~2 –solution-ordering C3,C2 ,重新排序
    • git commit –amend,创建新的提交节点
    • git rebase -i HEAD~2 –solution-ordering C2’’,C3’,重新排序
    • git rebase caption master,合并

cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)

  • git checkout master
    • git cherry-pick C2,在 master 后加入新节点 c2
    • git commit –amend,创建新的提交节点
    • git cherry-pick C3,将 c3 作为最新节点合并

Tag

  • 永远指向某个提交记录的标识,大版本,特性,bug
  • git tag v1 C1 命名标签 v1,指向提交记录 C1
    • git tag v1 side~1,side 的上一级打标签
    • git checkout v1,head 指向标签

最近的锚点

<tag>_<numCommits>_g<hash>

  • tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。当 ref 提交记录上有某个标签时,则只输出标签名称
  • git describe ,得到当前提交记录所在分支的最近节点及距离

多分支 rebase

  • 有序的提交历史,两两合并
    • git rebase master bugFix
    • git rebase bugFix side
  • 【禁止】git rebase c1,git rebase c2 后用 git rebase -i HEAD~2 排序,这样树无法看了

链式操作

  • 例子 1,找记录节点
    • git checkout HEAD,git checkout HEAD^2,git checkout HEAD2
    • git checkout HEAD^22,简化
  • 例子 2,为记录节点定义一个引用
    • git checkout c1,git branch bugWork,git checkout master
    • git branch bugWork master^^2^

分支操作

  • 需要把 master 分支上最近的几次提交做不同的调整后,分别添加到各个的分支上。
  • one 需要重新排序并删除 C5
    • git cherry-pick C4 C3 C2
  • two 仅需要重排排序
    • git cherry-pick C5 C4 C3 C2
  • three 只需要提交一次。
    • git branch -f three C2

fetch/pull/push

  • git fetch 更新状态(不改变文件),从远程仓库下载本地仓库中缺失的提交记录,更新远程分支指针
  • git pull 是 git fetch 和 git merge 的缩写

举例

  • 提交分支,master,本地开发完成,发现远端是 new master,四种处理

    • 本地变基,远端线性提交记录
      • git fetch;git rebase origin/master;git push;
      • git pull –rebase;git push;
    • 本地合并,远端合并
      • git fetch;git merge origin/master;git push;
      • git pull;git push;
  • 合并特性分支,本地多个分支,但新功能只在最后做一次推送集成

    • 方案 1
      • git fetch;git checkout new;git cherry-pick xx xx xx;git branch -f master HEAD;git checkout master;git push;
    • 方案 2
      • git fetch;git rebase o/master side1;git rebase side1 side2;git rebase side2 master;
  • 和 merge 的对比

    • Rebase 使你的提交树变得很干净, 所有的提交都在一条线上,但修改了提交树的历史
    • git checkout mastre;git merge c1;git merge c2;git push;
  • 远程分支

    • git checkout -b totallyNotMaster o/master,创建 totallyNotMaster 分支,用于跟踪远程分支 o/master
    • git branch -u o/master foo,本地 foo 分支跟踪 o/master
    • git branch -u o/master,本地当前分支跟踪 o/master
  • 提交

    • git push origin master,切到本地仓库中的“master”分支,获取所有的提交,再到远程仓库“origin”中找到“master”分支,推送
  • place 的参数

    • 当为 git push 指定 place 参数为 master 时,我们同时指定了提交记录的来源和去向。
    • git push origin :
    • git push origin master:new-branch,本地分支推送到远端新分支
  • fetch 的参数

    • git fetch origin foo,远程仓库的 foo 分支上,获取所有本地不存在的提交,放到本地的 o/foo 上
    • git push origin master:new-branch,本地 master 拉取远端 new-branch 分支
  • 省略 source

    • git push origin :side,删除了远程仓库中的 side 分支
    • git fetch origin :bugFix,会在本地创建一个新分支
  • git pull 是 fetch 后跟 merge 的缩写

    • git pull origin foo 相当于:git fetch origin foo; git merge o/foo
    • git pull origin bar~1:bugFix 相当于:git fetch origin bar~1:bugFix; git merge bugFix
    • 远端:本地
听说,打赏我的人最后都找到了真爱
↘ 此处应有打赏 ↙
// 用户脚本