22. 什么是git rebase
- Fast Forward (dev 分支有master分支最新内容)
- 3 way merge (dev分支没有master分支最新内容)
而git rebase是将3 way merge 的情况改造成Fast Forward这种一条线。
具体操作是将E内容整合到C上,同时将C、F重写。
由于git rebase 会修改commit节点信息,所以建议不要轻易rebase,尤其是在master上rebase。因为可能在你rebase之前,其他人从这个当前节点拉了一个分支,那么你rebase后就会改变当前节点的commit信息,那么那个从该节点拉分支的人在提交的时候就会出很多不可控的问题了。
23. 标签tag到底是怎么回事
创建不同tag的区别:
.git/objects里的类型:blob、tree、commit、tag
24. 远程分支和本地分支的同步
git branch // 查看本地分支
git branch -r // 查看远程分支
git branch -a // 查看所有分支
git fetch // 通过更新refs/romotes/origin/分支名称
,来同步远程和本地(包括分支内容和其他分支)
git remote // 查看远程分支
git remote -v // 查看远程分支的fetch和push
git remote show origin // 对比本地和远程分支的区别
git push --set-upsteam origin newbranch // 将本地分支推送到远程分支
其中,–set-upstream 等价于 -u
如果不写 -u,那么也会将本地分支推送到远程,但是不会 关联
上。
git push origin -d newbranch // 删除远程分支
git branch -vv // 查看当前的本地分支与远程分支的关联关系
对于3 way merge
27. 什么是FETCH_HEAD
git fetch会产生FETCH_HEAD,FETCH_HEAD记录信息会将当前分支放在首位。因此,当执行git pull 的时候就会知道将当前分支更新至最新的。
29. git push
30. git hooks
蓝色的:不会阻止继续操作,因为它是在执行后才触发;
黄色的:会阻止,因为他是在某个条件之前执行,但是可以跳过;
红色的:会阻止,而且跳不过去。
以.sample结尾的是不会执行的,如果把.smple去掉,就会执行了。
注意:.git/hook下的内容不会被上传到远程仓库,那么这样的话就不能被其他人使用这个hook,因此我们可以借用其他代码工具来生成本地的hook,因为代码是可以上传到远程仓库的,比如JavaScript通过husky来生成本地hook。