跳至主要內容
前端物语|面试物语-git

h7mlgitgit小于 1 分钟
说说 git 发生冲突的场景?如何解决?

说说 git 发生冲突的场景?如何解决?

一、是什么

一般情况下,出现分支的场景有如下:

  • 多个分支代码合并到一个分支时
  • 多个分支向同一个远端分支推送

h7mlinterviewgitinterviewgit大约 3 分钟
说说对 git pull 和 git fetch 的理解?有什么区别?

说说对 git pull 和 git fetch 的理解?有什么区别?

一、是什么

先回顾两个命令的定义

  • git fetch 命令用于从另一个存储库下载对象和引用
  • git pull 命令用于从另一个存储库或本地分支获取并集成(整合)

h7mlinterviewgitinterviewgit大约 3 分钟
说说 Git 中 HEAD、工作树和索引之间的区别?

说说 Git 中 HEAD、工作树和索引之间的区别?

一、HEAD

git中,可以存在很多分支,其本质上是一个指向commit对象的可变指针,而Head是一个特别的指针,是一个指向你正在工作中的本地分支的指针


h7mlinterviewgitinterviewgit大约 3 分钟
说说你对 git rebase 和 git merge 的理解?区别?

说说你对 git rebase 和 git merge 的理解?区别?

一、是什么

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


h7mlinterviewgitinterviewgit大约 3 分钟
说说你对 Git 的理解?

说说你对 Git 的理解?

一、是什么

git,是一个分布式版本控制软件,最初目的是为更好地管理Linux内核开发而设计

分布式版本控制系统的客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复


h7mlinterviewgitinterviewgit大约 3 分钟
说说你对版本管理的理解?常用的版本管理工具有哪些?

说说你对版本管理的理解?常用的版本管理工具有哪些?

一、是什么

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


h7mlinterviewgitinterviewgit大约 4 分钟
说说 Git 常用的命令有哪些?

说说 Git 常用的命令有哪些?

一、前言

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


h7mlinterviewgitinterviewgit大约 5 分钟
说说你对 git stash 的理解?应用场景?

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

一、是什么

stash,译为存放,在 git 中,可以理解为保存当前工作进度,会把暂存区和工作区的改动进行保存,这些修改会保存在一个栈上


h7mlinterviewgitinterviewgit大约 4 分钟
Git

Git 常用命令

初始化

git init

克隆项目

git clone

h7mlgitgit大约 5 分钟
gitattributes

当执行 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 就可以排上用场了:


h7mlengineeringgit小于 1 分钟
gitignore

配置此文件可以让 git 对某些特定文件不追踪变化

gitignore 语法规则

  • 空行不匹配任何文件,可以作为分隔符来提高可读性
  • # 为开头的行作为注释,若真的需要 #,则需要使用 \#
  • / 作为目录分割
  • ! 用于排除已忽略目录中的某个子文件/目录(即再次追踪)
  • 如果在某个模式的开头或者中间(或者两者都有)存在 /,那么就是 gitignore 文件所在的根目录
  • 如果末尾存在 /,那么只匹配目录,不再匹配文件
  • * 匹配除了 / 之外的任何,? 匹配除 / 之外的一个字符,范围符号例如 [a-zA-Z] 匹配范围中的一个字符
  • ** 的意义就比较多了
    • 例如 **/foo 匹配所有地方的 foo 文件或文件夹,与 foo 的模式相同
    • **/foo/bar 匹配任何地方的 foo 目录下的 bar 文件或文件夹
    • 后面的 /** 则匹配所有的子目录或者子文件,例如 a/** 匹配 a 下的所有目录和文件
    • 中间的 ** 则表示无限深度的子目录,例如 a/**/b 匹配 a 下的所有子目录下的 b 文件或文件夹

h7mlengineeringgit大约 1 分钟