git学习笔记

来源:互联网 发布:mac添加dock 编辑:程序博客网 时间:2024/06/10 06:54
  1. 命令参数自动补齐
    按tab键或2下tab键

  2. 查看git版本
    git –version

  3. 在git命令输出中开启颜色显示
    git config –global color.ui true

  4. 初始化git版本库
    git init
    git init 目录

  5. 将文件暂存到版本库
    git add example.txt

  6. 将所有暂存到版本库的内容都提交到版本库
    git commit -m “example”

  7. 在工作区的文件中搜索内容
    git grep “content”

  8. 查看版本库.git文件夹所在的目录
    git rev-parse –git-dir

  9. 查看工作区根目录
    git rev-parse –show-toplevel

  10. 查看当前目录相对于工作区根目录的相对目录
    git rev-parse –show-prefix

  11. 查看当前目录后退到工作区根目录的深度
    git rev-parse –show-cdup

  12. 显示分支提交的id
    git rev-parse mater
    git rev-parse HEAD

  13. 查看git提交日志
    git log
    git log –stat 查看每次提交的文件变更统计
    git log –pretty=oneline 日志精简输出
    git log –pretty=fuller 详细日志
    git log –pretty=raw –graph id 查询日志跟踪链
    git log –stat -2 查看最新的2次提交

  14. git diff 三种文件状态对比
    git diff 工作区和暂存区的对比
    git diff HEAD 工作区和版本库的对比
    git diff –cached或–staged 暂存区和版本库的对比
    git diff B A 比较里程碑B和A
    git diff A 比较工作区和里程碑A
    git diff –cached A 比较暂存区和里程碑A
    git diff commit1 commit2 –paths 比较2个提交的文件路径下的差异
    git diff –word-diff 逐词比较

  15. git工作原理
    这里写图片描述

  16. git reset HEAD
    暂存区的目录树会被改写,被版本库HEAD的目录树替代
    工作区不受影响

  17. git rm –cached file
    在暂存区中直接删除文件,工作区不受影响

  18. git checkout
    git checkout . 用暂存区的全部文件替换工作区的文件
    git checkout – file 用暂存区的指定文件替换工作区的文件
    替换后,工作区的改动会被清空
    git checkout HEAD . 用版本库的全部文件替换暂存区和工作区的文件
    git checkout HEAD 用版本库的指定文件替换暂存区 和工作区的文件

  19. 显示版本库的目录树
    git ls-tree -l HEAD

  20. 显示暂存区的目录树
    git ls-files -s

  21. 清空工作区中没有加入版本库的文件和目录
    git clean -fd

  22. 保存当前工作进度
    git stash 对暂存区和工作区的状态进行保存
    git stash list查看保存的进度
    git stash pop 从最近保存的进度恢复,保存的进度会被删除
    git stash apply 从最近保存的进度恢复,保存的进度不会被删除
    git stash pop [–index] [stash] 加index还会恢复暂存区
    git stash drop [stash] 删除一个进度
    git stash clear 清空
    git stash branch new_branch [stash] 基于进度创建分支

  23. 查看40位对象id的类型
    git cat-file -t id
    git cat-file -p id 查看对象的内容

  24. git对象库各个对象之间的关系
    这里写图片描述

  25. 工作分支
    git branch 显示当前工作分支

  26. git版本库结构图
    这里写图片描述

  27. git重置master游标
    git reset –hard HEAD^
    git reset –hard id

  28. git恢复重置前的提交
    git reflog show master | head -5

    git reset –hard master@{2}

  29. 执行合并操作
    git merge id

  30. git reset命令详解
    用法一:git reset [-q] [commit] [–] paths
    用法二:git reset [–soft| –mixed | –hard| –merge| –keep] [-q] [commit]
    commit是可选项,可以使用引用或ID,省略commit相当于使用了HEAD的指向作为提交ID
    用法一和二的主要区别是是否包含paths,在paths前面可以加–作为分割,避免路径和引用冲突
    用法一::不会重置引用,不会改变工作区,而是用指定版本库commit下的文件替换暂存区中文件
    用户二::会重置引用,还可能会对暂存区和工作区进行重置
    这里写图片描述
    用法实例:

    • git reset
      不会重置引用,重置暂存区,不会重置工作区。(不会重置引用的原因是重置引用到HEAD相当于没有重置)
    • git reset HEAD
      同上
    • git reset – filename
      重置暂存区的filename文件,不做其他操作
    • git reset HEAD – filename
      同上
    • git reset –soft HEAD^
      只改变引用,向前回退一次。工作区和暂存区不改变
    • git reset HEAD^
      相当于加了–mixed,工作区不改变,引用向前回退一次,暂存区回退到前一次提交
    • git reset –mixed HEAD^
      同上
    • git reset –hard HEAD^
      彻底撤销最近的提交。引用回退,工作区和暂存区也回退
  31. git checkout命令详解
    git checkout和git reset的主要区别是git checkout用于覆盖工作区,git reset用于重置暂存区
    用法一:git checkout [-q] [commit] – paths
    用法二:git checkout [branch]
    用法三:git checkout [-m] [[-b|–orphan] new_branch] [start_point]
    用法一主要是用版本库的文件覆盖暂存区和工作区中对应的文件。如果commit省略,则用暂存区的文件覆盖工作区的文件;不会改变HEAD头指针
    用法二主要是用于分支切换,会改变HEAD头指针。省略branch则相当于对工作区进行状态检查,汇总显示工作区、暂存区和HEAD的差异
    用法三主要是创建和切换到新的分支new_branch,新的分支从start_point指定的提交开始创建。

  32. 在暂存区删除文件
    git rm paths 删除指定文件
    git add -u 提交工作区改动文件到暂存区,包括修改和删除,不包括新增
    git add -A 将新增、修改和删除都提交到暂存区

  33. 在工作区和暂存区改文件名
    git mv file1 file2

  34. 文件忽略
    方法一:在工作区中创建一个.gitignore文件,把要忽略的文件以通配符的方式写入。
    *.a 忽略所有.a的文件
    !lib.a 不忽略lib.a文件
    /TODA 忽略toda目录的文件,不忽略 toda子目录的文件
    build/ 忽略所有build目录下的文件
    doc/*.txt 忽略所有doc目录下的.txt文件,不忽略doc子目录下的txt文件
    方法二:在.git目录下的一个文件.git/info/exclude设置
    方法三:通过git的全局配置变量core.excludesfile 指定
    git config –global core.excludesfile /home/file

  35. 文件归档
    基于最新提交建立归档文件
    git archive -o latest.zip HEAD
    只将目录src和doc建立到归档文件
    git archive -o partial.tar HEAD src doc
    基于里程碑v1.0建立归档
    git archive –format=tar –prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz

  36. 查看所有的提交记录
    git rev-list HEAD

  37. 打开git GUI界面
    git gui 或git citool

  38. 显示分支
    git rev-parse –symbolic –branches

  39. 显示里程碑
    git rev-parse –symbolic –tags

  40. 显示定义的所有引用
    git rev-parse –symbolic –glob=refs/*

  41. 文件追溯:逐行查找每行的版本
    git blame filenames
    git blame -L 6,+5 filenames 显示文件6到11行

  42. 二分查找
    git bisect

  43. 修补提交
    单步修补:
    git checkout HEAD^ – paths 先还原
    git commit -amend -m “zzh” 修补提交
    多步修补:
    git reset –soft HEAD^^ 版本库回到2个步骤之前
    git commit -m “zzh1” 合并后面的2个提交为一个提交

  44. 拣选命令git cherry-pick
    从众多的提交中挑选一个提交应用到当前工作分支上
    git cherry-pick master^

  45. 提交时重用一个提交的提交说明
    git commit -C C

  46. 将master指向最新的提交上
    git reset –hard HEAD@{1}

  47. 创建分支并将分支合并回主干的过程:
    比如A->B->C->D->E->F
    现在要把CD进行融合
    git checkout D
    git reset –soft HEAD^
    git commit -C C
    git cherry-pick E
    git cherry-pick F
    git checkout master
    git reset –hard HEAD@{1}

  48. 设置里程碑
    用法1:git tag [tagname] [commit]
    用法2:git tag -a [tagname] [commit]
    用法3:git tag -m [msg] [tagname] [commit]
    用法4:git tag -s [tagname] [commit]
    用法5:git tag -u [key-id] [tagname] [commit]
    用法2、3会带有说明,用法4、5会带有GnuPG签名
    git tag A 在最新的提交中设置里程碑A
    git tag B HEAD^
    git tag C HEAD~2 前2次提交

  49. 变基操作
    将制定范围内的提交嫁接到另外一个提交上
    用法1:git rebase –onto [newbase] [since] [till]
    用法2:git rebase –onto [newbase] [since]
    用法3:git rebase [since] [till]
    用法4:git rebase [since]
    用法5:git rebase -i …
    用法6:git rebase –continue
    用法7:git rebase –skip
    用法8:git rebase –abort

    用法6会先解决冲突后继续操作
    用法7会跳过当前的冲突提交继续操作
    用法8会终止操作
    [since]..[till]版本范围语法是从since的后一个提交开始到till的所有提交,包含till

    git rebase –onto C E^ F 把E到F的提交变基到C上
    git rebase -onto C D 把D后一个提交到最新提交变基到C上

  50. 反转提交
    git revert HEAD 将当前的提交再反向提交一次

  51. git clone
    用法1:git clone [repository] [directory]
    用法2:git clone –bare [repository] [directory.git]
    用法3:git clone –mirror [repository] [directory.git]

    用法1将版本库克隆岛directory目录下,目录相当于版本库的工作区

  52. 查看上游版本库的注册信息
    git remote -v

  53. 禁止非快进式推送
    即禁止覆盖push
    git –git-dir=/path/to/repos/a.git config receive.denyNonFastForwards true

  54. git fetch 获取版本库最新的版本

  55. git merge 合并操作

  56. 里程碑
    git tag 显示当前版本库的里程碑列表
    git tag -n1 每个里程碑最多显示一行说明
    git tag -l jx* 使用通配符对里程碑进行过滤
    git log –decorate 可以看到提交对应的里程碑
    git describe 显示提交的里程碑或祖先的里程碑
    git name-rev 显示分支名
    git name-rev –tag 显示里程碑
    git cat-file -t tag2 检查里程碑指向的对象
    git cat-file -p tag2 检查里程碑的内容
    git tag -d mytag 删除里程碑
    git push origin :tagname 删除远程版本库的里程碑

  57. 分支命令git branch
    用法1:git branch
    用法2:git branch [branchname]
    用法3:git branch [branchname] [startpoint]
    用法4:git branch -d [branchname]
    用法5:git branch -D [branchname]
    用法6:git branch -m [oldbranch] [newbranch]
    用法7:git branch -M [oldbranch] [newbranch]
    用法1用于显示本地分支列表
    用法2、3用于创建分支
    用法4、5用于删除分支,4会检查 分支是否合并到其他分支,否则拒绝删除;5会强制删除
    用法6、7用于重命名分支,如果版本库存在新的名称,用法6拒绝重命名,用法7强制执行

  58. 将分支代码合并到主线
    (1)工作区切换到主线
    git checkout master
    (2)执行合并命令
    git merge 分支名
    (3)完成本地分支向远程分支的同步
    git push
    (4)删除分支
    git branch -d 分支名

0 0