Git八股文
第一章 git基础
1.1 什么是git
git是一款免费的开源的分布式版本控制系统
1.2 为什么要使用git
为了保留之前的所有版本,方便回滚或修改
1.3 集中化版本控制系统和分布式版本控制系统的区别
- 集中化版本控制系统如svn,客户端连接到中央服务器取出最新的文件或者提交更新。所以有个很明显的缺点就是如果中央服务器发生故障,故障期间谁都无法提交更新
- 分布式版本控制系统如git,客户端不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来,这样即使中央仓库发生故障,我们可以先提交到本地仓库,等故障恢复后再提交到中央仓库
第二章 git常用命令
2.1 常用命令
- 初始化为可以管理的仓库
git init.
- 将工作区文件添加到暂存区(只需要添加修改过的文件)
git add 文件名
- 将暂存区文件提交到本地仓库
git commit -m "备注"
在此之前,一般还要设置作者邮箱和姓名,例如
git config --global user.email "邮箱名"
git config --global user.name "姓名"
- 查看工作区状态(用于显示暂存区和本地仓库的状态)
git status
- 查看当前分区的提交log
git log
2.2 分支命令
- 查看当前分支
git branch
- 创建分支(但不会切换到新分支)
git branch 分支名
- 切换分支(只能切换已有的分支)
git checkout 分支名
- 创建并切换分支
git checkout -b 分支名
- 删除分支
git branch -d 分支名
- 合并分支(当前工作分支的内容会由于merge操作产生更新,但是目标分支(要合并的分支名)则完全不受影响),merge操作可能会出现冲突
git merge 要合并的分支名
git rebase 要合并的分支名
2.3 远程仓库命令
- 远程仓库克隆到本地(在没有本地仓库的时候,从远程仓库克隆到本地,是一个从无到有的过程)
git clone 地址
- 下拉代码(在本地有本地仓库的时候,从远程仓库获得最新的commit数据,并merge到工作区,一般在push前会pull)
// 远程仓库名称默认为origin,分支名称默认为与当前本地分支同名。
git pull [remote name] [branch name]
// 等价于
git fetch + git merge
- 推送代码(将本地仓库中的文件推送到远程仓库)
git push [remote name] [branch name]
2.4 关系图
第三章 其他面试题
3.1 git pull和git fetch的区别
- git fetch只是将远程仓库的最新版本下载到本地仓库,但是不会自动merge,工作区的文件没有更新
- git pull会从远程仓库获取到的最新版本并merge到工作区
- git pull = git fetch + git merge
3.2 git clone和git pull的区别
- git clone用在没有本地仓库的时候,从远程仓库克隆到本地,是一个从无到有的过程
- git pull可以只更新某一分支,用在有本地仓库的时候,从远程仓库获得分支最新的commit数据,并merge到工作区,一般在push前会pull。
3.3 git merge和git rebase的区别
参考:https://blog.csdn.net/qq_41035588/article/details/121354279
- git merge 操作合并分支会让两个分支的共同提交点之后每一次提交都按照提交时间排序,并且会将两个分支的最新一次commit点合并成一个新的commit,最终的分支树呈现非整条直线的形式
- git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,最终的分支树呈现一条直线的形式。