在看《Pro Git》这本书以深入学习一下git,写一下学习笔记
1. 初始化一个项目后,默认看不到.git子目录,打开一个终端输入一下命令即可
$ defaults write com.apple.finder AppleShowAllFiles TRUE //显示.git目录
$ defaults write com.apple.finder AppleShowAllFiles FALSE //隐藏.git目录
$ killall Finder //重启Finder
2. 克隆项目时自定义本地仓库名称 ,如下:
$ git clone https://github.com/libgit2/libgit2 mylibgit
3. 工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。 已跟踪的文件是指那些被纳入了 版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。 工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放 入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们。
4. git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。
5. 状态预览
git status 命令的输出十分详细,但其用语有些繁琐。 Git 有一个选项可以帮你缩短状态命令的输出,这样可 以以简洁的方式查看更改。 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种 格式更为紧凑的输出。
6. 文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表, 可以https://github.com/github/gitignore 找到它。
7. git diff 本身只显示尚未暂存的改动
8. 可以使用 git difftool --tool-help 命令来看你的系统支持哪些 Git Diff 插件。
9. 跳过使用暂存区域
尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂 存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
10. 如果要删除之前修改过或已经放到暂存区的文件,则必须使用 强制删除选项 -f, 即: git rm -f
11.把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录 中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。
$ git rm --cached README
11. 文件重命名
$ git mv file_from file_to
12. 查看提交历史中的每次提交的简略统计信息
$ git log --stat
13. git log --pretty 可以使用不同于默认格式的方式展示提交历史。由参数:oneline、short、full、fuller、format
$ git log --pretty=oneline
git log --pretty=format 可以定制记录的显示格式。 这样的输出对后期提取分析格外有用
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
14. 撤销操作,提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:
$ git commit --amend
例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终只会有一个提交——第二次提交将代替第一次提交的结果。
15. 取消暂存
git reset HEAD <file>
16. 撤销对文件的修改
git checkout -- <file>
17. 远程仓库
- 远程仓库可以在你的本地主机上,词语“远程”未必表示仓库在网络或互联网上的其它位置,而只是表示它在别处。
- 添加远程仓库: git remote add <shortname> <url>
- 重命名: git remote rename pb paul
- 移除: git remote remove <shortname> 或 git remote rm <shortname>
18. 打标签,
- 按照通配符列出标签需要 -l 或 --list 选项
$ git tag -l "v1.8.5*"
- Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。
- 轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件 地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签,这样你可以拥有以上所有信息。
- 创建附注标签: git tag -a v1.4 -m "my version 1.4"
- 查看标签信息和与之对应的提交信息: git show <tagname>
- 轻量标签本质上是将提交校验和存储到一个文件中——没有保存
任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字 - 后期补标签,在命令的末尾指定提交的校验和即可,如:
$ git tag -a v1.2 9fceb02
- 共享标签: 默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——可以运行 git push origin <tagname>。如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。
$ git push origin --tags