Git

高级命令

git submodule 子模块

有种情况经常会遇到:某个工作中的项目需要包含并使用另一个项目。也许是第三方库,或者独立开发的,用于多个父项目的库。现在问题来了:想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。如果将另外一个项目中的代码复制到自己的项目中,那么做的任何自定义修改都会使合并上游的改动变得困难。「Git 通过子模块来解决这个问题,允许将一个 Git 仓库作为另一个 Git 仓库的子目录。它能将另一个仓库克隆到自己的项目中,同时还保持提交的独立。」

  1. # 在主项目中添加子项目,URL 为子模块的路径,path 为该子模块存储的目录路径
  2. git submodule add [URL] [Path]
  3. # 克隆含有子项目的主项目
  4. git clone [URL]
  5. # 当在克隆这样的项目时,默认会包含该子项目的目录,但该目录中还没有任何文件
  6. # 初始化本地配置文件
  7. git submodule init
  8. # 从当前项目中抓取所有数据并检出父项目中列出的合适的提交-更新子模块
  9. git submodule update
  10. # 等价于 git submodule init && git submodule update
  11. git submodule update --init
  12. # 自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块
  13. git clone --recurse-submodules [URL]

git gc-运行Git的垃圾回收功能,清理冗余的历史快照

运行Git的垃圾回收功能,清理冗余的历史快照

git archive-将加了tag的某个版本打包提取

将加了tag的某个版本打包提取

  1. git archive -v --format=zip v0.1 > v0.1.zip

--format 表示打包的格式,如 zip-v 表示对应的tag名,后面跟的是tag名,如 v0.1

git fetch-将远程版本库的更新取回到本地版本库

  1. # 默认情况下,git fetch 取回所有分支的更新。如果只想取回特定分支的更新,可以指定分支名。
  2. $ git fetch origin daily/0.0.1

问题排查

git blame-查看文件每行代码块的历史信息

  1. # 查看文件每行代码块的历史信息
  2. $ 截取 demo.html 文件1-10行历史信息

git bisect-二分查找历史记录,排查BUG

  1. # 开始二分查找
  2. $ git bisect start
  3. # 标记当前二分提交ID为有问题的点
  4. $ git bisect bad
  5. # 标记当前二分提交ID为没问题的点
  6. $ git bisect good
  7. # 查到有问题的提交ID后回到原分支
  8. $ git bisect reset