乙巳🐍年

acc8226 的博客

Git Submodule 允许一个 git 仓库,作为另一个 git 仓库的子目录,并且保持父项目和子项目相互独立。

父项目:外层项目
子项目:里面的项目。

常用命令

git submodule 涉及的常用功能有:

  • git clone <repository> –recursive :递归的方式克隆整个项目

  • git submodule add <repository> <path> :添加子模块

  • git submodule init :初始化子模块

  • git submodule update :更新子模块

  • git submodule foreach git pull: 拉取所有子模块

  • git submodule foreach git checkout -- . 所有子模块进行 checkout -- . 操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
NAME
git-submodule - Initialize, update or inspect submodules

SYNOPSIS
git submodule [--quiet] add [<options>] [--] <repository> [<path>]
git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
git submodule [--quiet] init [--] [<path>...]
git submodule [--quiet] deinit [-f|--force] (--all|[--] <path>...)
git submodule [--quiet] update [<options>] [--] [<path>...]
git submodule [--quiet] summary [<options>] [--] [<path>...]
git submodule [--quiet] foreach [--recursive] <command>
git submodule [--quiet] sync [--recursive] [--] [<path>...]
git submodule [--quiet] absorbgitdirs [--] [<path>...]


DESCRIPTION
Inspects, updates and manages submodules.

For more information about submodules, see gitsubmodules(7).
阅读全文 »

初始化仓库并推送到远端

1. 初始化

1
2
echo "# MyProject" >> README.md
git init

2. 然后可以愉快的进行开发了

1
2
add .
commit 'lalala'

3. 进行推送(如果本身已经是 git 仓库了,直接走到第 3 步骤)

1
2
3
4
# 将本地仓库关联一个远程库
git remote add origin git@github.com:someone/MyProject.git
# 加上了 -u 参数,Git 不但会把本地的master分支内容推送的远程新的master分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令
git push -u origin master
阅读全文 »

提交 ID

显式引用和隐式引用用来指代每一次提交。尽管有时两种引用都不方便,但是幸运的是, Git 提供了许多不同的机制来为提交命名,这些机制有各自的优势,需要根据上下文来选择。

显式引用
由于输入一个 40 位十六进制的 SHA1 数字是一项繁琐且容易出错的工作,因此 Git 允许你使用版本库的对象库中唯一的前缀来缩短这个数字。

隐式引用
引用(ref)是一个 SHA1 散列值,指向 Git 对象库中的对象。虽然一个引用可以指向任何 Git 对象,但是它通常指向提交对象。符号引用(symbolic reference) ,或称为 symref,间接指向 Git 对象。它仍然只是一个引用。

本地特性分支名称、远程跟踪分支名称和标签名都是引用。

  • refs/heads/ref 代表本地分支
  • refs/remotes/ref 代表远程跟踪分支
  • refs/tags/ref 代表标签

特殊引用

阅读全文 »

stash 储藏

当手头工作没有完成时,先把工作现场 git stash 一下,然后去修复 bug

–include-untracked 参数可以额外储藏新的未被追踪的文件。
–all 选项将收集所有未跟踪的文件以及在 .gitignore 和 排除文件中明确忽略的文件。

1
2
3
4
# 更推荐对 stash 加一些注释
`git stash save 'message'`
`git stash save --include-untracked 'message'`
`git stash save --all -untracked 'message'`

Git 把 stash 内容存在某个地方了(包含了工作区 和 暂存区的内容),但是需要恢复一下,有两个办法:

  • git stash apply 恢复,但是恢复后,stash 内容并不删除,你需要用 git stash drop 来删除;
  • 另一种方式是 git stash pop,恢复的同时把 stash 内容 pop 出去.

按保存时间由近及远的顺序列举出储藏栈。 git stash list

阅读全文 »

本地分支 和 branch 命令

Git 鼓励开发者频繁使用分支,正是因为有着这些特性作保障。Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。(译注:将 HEAD 想象为当前分支的别名。)

$ git branch [branch-name] 创建新的分支
$ git branch [-r | --track] [本地分支名] [远程仓库名]/[远程分支名] 创建追踪分支
$ git branch 查看所有分支
$ git branch -a 查看当前的版本库当中有哪些分支, 包含远程仓库的所有分支
$ git branch -r 仅看所有远程分支
$ git branch -v 要查看各个分支最后一个提交对象的信息 (译注:此为 --verbose 的简写,取首字母)
$ git branch -vv 查看当前的本地分支与远程分支的关联关系

$ git branch --merge
查看哪些分支已被并入当前分支(译注:也就是说哪些分支是当前分支的直接上游。一般来说,列表中没有 * 的分支通常都可以用 git branch -d 来删掉。原因很简单,既然已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。
$ git branch --no-merged 查看尚未合并的工作,它会显示还未合并进来的分支。由于这些分支中还包含着尚未合并进来的工作成果,所以简单地用 git branch -d 删除该分支会提示错误,因为那样做会丢失数据, 过,如果你确实想要删除该分支上的改动,可以用大写的删除选项 -D 强制执行

阅读全文 »
0%