- 说说你对 Git 的理解?
- 说说 Git 中 HEAD、工作树和索引之间的区别?
- 说说你对版本管理的理解?常用的版本管理工具有哪些?
- 说说 Git 常用的命令有哪些? ,- 说说 Git 中 fork, clone,branch 这三个概念,有什么区别?
- [ 说说你对 git rebase 和 git merge 的理解?区别?](https://www.h7ml.cn/posts/interview/git/gitRebase_ gitMerge)
- [ 说说对 git pull 和 git fetch 的理解?有什么区别?](https://www.h7ml.cn/posts/interview/git/git_pull _git_fetch)
- [ 说说你对 git reset 和 git revert 的理解?区别?](https://www.h7ml.cn/posts/interview/git/git_reset_ git_revert)
- 说说你对 git stash 的理解?应用场景?
说说 git 发生冲突的场景?如何解决?

一、是什么
一般情况下,出现分支的场景有如下:
- 多个分支代码合并到一个分支时
- 多个分支向同一个远端分支推送
说说对 git pull 和 git fetch 的理解?有什么区别?

一、是什么
先回顾两个命令的定义
- git fetch 命令用于从另一个存储库下载对象和引用
- git pull 命令用于从另一个存储库或本地分支获取并集成(整合)
说说你对 git reset 和 git revert 的理解?区别?

一、是什么
git reset
reset用于回退版本,可以遗弃不再使用的提交
说说 Git 中 fork, clone,branch 这三个概念,有什么区别?

一、是什么
fork
fork,英语翻译过来就是叉子,动词形式则是分叉,如下图,从左到右,一条直线变成多条直线
说说 Git 中 HEAD、工作树和索引之间的区别?

一、HEAD
在git中,可以存在很多分支,其本质上是一个指向commit对象的可变指针,而Head是一个特别的指针,是一个指向你正在工作中的本地分支的指针
说说你对 git rebase 和 git merge 的理解?区别?

一、是什么
在使用 git 进行版本管理的项目中,当完成一个特性的开发并将其合并到 master 分支时,会有两种方式:
说说你对 Git 的理解?

一、是什么
git,是一个分布式版本控制软件,最初目的是为更好地管理Linux内核开发而设计
分布式版本控制系统的客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复
说说你对版本管理的理解?常用的版本管理工具有哪些?

一、是什么
版本控制(Version control),是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一程序文件都得到同步
说说 Git 常用的命令有哪些?

一、前言
git的操作可以通过命令的形式如执行,日常使用就如下图 6 个命令即可

说说你对 git stash 的理解?应用场景?

一、是什么
stash,译为存放,在 git 中,可以理解为保存当前工作进度,会把暂存区和工作区的改动进行保存,这些修改会保存在一个栈上
Git 常用命令
初始化
git init
克隆项目
git clone
当执行 git 动作时,.gitattributes 文件允许你指定由 git 使用的文件和路径的属性,例如:git commit 等。
比较常用的有 eol(end of line) 属性,主要原因在于 Windows 和 Unix like 的文件结尾行不同
- windows 是
CRLF(Carriage Return Line Feed) 回车换行 - 但在 unix like 系统中,使用
LF(Line Feed) 换行
由于换行符不同,不同操作平台之间的开发者很容易导致 Git 提交的文件不一致(可能会从 LF 改为 CRLF 或者反之),所以 gitattributes 就可以排上用场了:
配置此文件可以让 git 对某些特定文件不追踪变化
gitignore 语法规则
- 空行不匹配任何文件,可以作为分隔符来提高可读性
#为开头的行作为注释,若真的需要#,则需要使用\#/作为目录分割!用于排除已忽略目录中的某个子文件/目录(即再次追踪)- 如果在某个模式的开头或者中间(或者两者都有)存在
/,那么就是gitignore文件所在的根目录 - 如果末尾存在
/,那么只匹配目录,不再匹配文件 *匹配除了/之外的任何,?匹配除/之外的一个字符,范围符号例如 [a-zA-Z] 匹配范围中的一个字符**的意义就比较多了- 例如
**/foo匹配所有地方的foo文件或文件夹,与foo的模式相同 **/foo/bar匹配任何地方的foo目录下的bar文件或文件夹- 后面的
/**则匹配所有的子目录或者子文件,例如a/**匹配 a 下的所有目录和文件 - 中间的
**则表示无限深度的子目录,例如a/**/b匹配 a 下的所有子目录下的 b 文件或文件夹
- 例如