git小教室
说明
-
”~” 跟 ”^” 区别
- ^ caret ~ tilda
- git checkout HEAD^^^和git checkout HEAD~3等价,都代表当前版本的前3个版本
- 区别在于^3和~3代表不同概念,^3代表回退一个版本,以第三条graph线为准。
- 操作符 ^ 与 ~ 符一样,后面也可以跟一个数字。但是该操作符后面的数字与 ~ 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个父提交。
-
当head没有指到任何本地分支上就会脱离。
-
git仓库中最重要的是commitID,而且commitID不会被篡改,分支和tag只是commitID的贴纸。
-
git bisect start [终点] [起点]
- 二分法排错,“终点”是最近的提交,“起点”是更久以前的提交。它们之间的这段历史,就是差错的范围。
- git bisect start HEAD 5d67e3
- 使用git bisect good 和 git bisect bad来标识,直到找到xxx is the first bad commit
- git bisect reset # 退出查错,回到最近一次的代码提交,就可以进行改错了
-
git diff
- git diff c1 c2 比较两次提交的差异
- git diff c1 比较c1和HEAD所指的commit的差异
- git diff 比较工作区和暂存区的差异
- git diff —cached 比较暂存区和本地仓库区HEAD的差异
-
git rebase使用时机
- 没有推到远程分支的commit,有点乱,使用 rebase 来整理分支后再推出去。
- 推到远程分支的commit,如果用rebase 等于是
修改已经发生的事实
,相当于进入了一个新的平行时空,所以正常来说是推不上去的,推出去的时候要用git push -f
。 - 对于推到远程分支的commit,请不要任意使用 rebase,除非
- 远程分支只有自己在用
- 远程共用分支和大家协商,以你推出去的为准,推出去后,让大家重新删除分支再拉。
本地操作
远程仓库操作
git pull 到头来就是 fetch 后跟 merge 的缩写。你可以理解为用同样的参数执行 git fetch,然后再 merge 你所抓取到的提交记录。
git物件原理
- 共有四种分类 blob(档案)、tree(目录和文件名)、commit、tag
- git add -> blob, git commit -> tree和commit,git tag -> tag
- 操作示例过程