2022 年你需要知道的 30 个 Git 面试问题和答案
已发表: 2021-01-04Git 越来越受欢迎。 开发人员不断努力发布非测试版应用程序的更新版本,以修复错误或改进其功能。 Git 通过充当版本控制来服务,其中所有更改都存储在一个中央存储库中。
团队中的每个开发人员都可以查看版本、进行更改,然后上传。 对于在远程团队中工作或在家工作的人来说,它也非常有效。 Git 不仅被开发人员使用。 即使团队中的非开发人员也可以使用它来获取最新版本或特定版本的应用程序,并将其用于测试或其他工作。
Git 是一个命令行工具,Git Hub 是中心,程序员在这里保存他们的项目并与团队沟通。
因此,需要 Git 知识,并且随着需求的增加,我们形成了一组 Git 面试问题,可以帮助您找到工作。 为了更容易理解,我们将 GitHub 面试问题分为三个部分——初学者、中级和高级。
目录
基础级 Git 面试题
Q.1) 解释 SVN 和 Git 的区别
- SVN是属于第二代的集中式版本控制工具,与Git相反,Git是属于第三代的去中心化版本控制工具。
- 在 SVN 中,服务器端存储库保存版本历史记录。 在 Git 中,您可以将整个存储库复制到您的 PC 上。
- 在 SVN 中,您只能在在线时提交,这与 Git 不同,即使在离线时您也可以提交。
- 与更快的 Git 相比,SVN 中的拉取和推送操作更慢。
- 在 SVN 中,除非您这样做,否则不会共享您的工作,这与自动共享的 Git 不同。
Q.2) 什么是 Git?

Git 允许开发人员和团队成员跟踪任何人所做的更改。 它还可以让您回到旧版本。 它是一个分布式版本控制系统,可帮助团队了解谁进行了更改以及更改的日期和时间。 与其他版本控制系统相比,它有自己的一套优势。
Git 最大的好处是它不依赖中央服务器来保存项目的所有版本。 开发人员可以在自己的系统上创建存储库的克隆(副本),以显示整个历史记录。 这在服务器中断时特别有用。 在 Git 中,有一个中央云存储库,程序员或团队成员可以在其中提交更改并与他们的团队共享。
Q.3) GitHub 和 Git 有什么区别?
Git 存储库托管服务称为 GitHub。 此外,它还具有自己的功能,例如提供基于 Web 的图形界面。 此外,GitHub 除了作为项目的管理工具外,还提供访问权限。
另一方面,Git 是一个分布式的版本控制系统。 它主要用于跟踪在非测试版应用程序中所做的任何更改。 它提供速度、支持和数据完整性。 开发人员和其他团队成员可以查看谁做了哪些更改以及在哪个日期。
Q.4) 使用版本控制系统有什么好处?
它可以帮助团队及其成员,因为他们可以随时工作,因为版本控制系统使他们能够灵活地合并他们在通用版本中所做的修改,而不会有任何麻烦。
历史记录显示所有旧版本及其变体,允许团队成员在需要时恢复。 团队成员还拥有整个项目的快照。
团队成员在进行任何修改时需要发表评论,这有助于其他人了解哪些确切的更改使项目更有条理。 没有人需要等待解释。 团队成员确切地知道谁更改了版本以及原因。
如果不幸的服务器中断,像 Git 这样的分布式 VCS 可以让您拥有项目的完整历史记录,因为它可以下载到您的桌面上。
Q.5) Git 使用什么语言?
Git 使用的语言是“C”语言,因为与其他高级语言不同,“C”语言可以满足 GIT 所需的速度,因为它减少了运行时间。
Q.6) 告诉我们一些 Git 存储库托管功能
- Github
- GitLab
- 源锻造
- 比特桶
- GitEnterprise
Q.7) 你如何致力于 Git?
要编写提交消息,您需要编写命令“git commit -a”。
命令行上的 -a 命令 git 提交所有已更改的跟踪文件的最新内容。 如果新文件需要第一次提交,您可以在 git commit -a 之前使用命令“git add <file>”。
Q.8) 如何修复损坏的提交?
您可以使用命令“git commit –amend”来修复损坏的提交。 通过运行此命令,它修复了编辑器中损坏的提交消息。
阅读:顶级 Nagios 面试问题
Q.9) Git 中的存储库是什么意思?
它是 Git 保存所有文件的地方。 Git 具有在远程和本地存储库中存储文件的能力。
Q.10) 如何创建存储库?
在 Git 中创建存储库很简单。 如果尚未完成,您需要为项目创建一个目录。 然后,您需要运行命令“git init”。 此命令在项目目录中创建 git 目录。
Q.11) 解释 Git 中的“裸仓库”?
裸 Git 存储库通常用作远程存储库,您可以与团队成员或其他人共享它。 它里面没有工作树,因为在远程存储库中没有完成任何工作。 在其他文件中,其中没有文件,您将对其进行编辑。 相反,工作目录包含一个 .git 子目录,其中包含所有版本历史记录和一个工作树。
Q.12) git 中的“冲突”是什么意思?
通常,Git 使用其自动合并功能来管理所有合并。 但是,如果两个单独的分支在文件的完全相同的行中进行了编辑,则可能会发生冲突。 当一个文件从一个分支中删除但它已在另一个分支中编辑时,也可能发生这种情况。 当您在团队环境中工作时,这些必然会发生。
Q.13) 什么是 git is-tree?
'git is-tree' 表示一个树对象,包括模式和项目名称以及树或 blob 的 SHA-1 值。
中级 Git 面试题
Q. 14) 如果在 Git 中出现冲突,你如何解决?
您可以通过以下方式解决 Git 中的冲突:
- 确定哪些文件引起了冲突。
- 通过更改该特定文件来解决冲突。
- 通过命令 git add 再次添加这些文件。
- 使用命令 git commit 提交文件。
Q.15) 如果一个提交已经被推送并公开,你如何在 Git 中恢复它?
有两种方法可以做到这一点,具体取决于具体情况:
- 您可以将其完全删除或在新提交中修复错误文件,然后将其推送回远程存储库。 这是解决此问题的最常用方法。 对文件进行相关更改后,使用命令 git commit -m “commit message”,将其提交到远程存储库。
- 或者,您可以创建一个新的提交,以撤消在错误提交中所做的所有修改。 您可以使用命令 git revert <name of bad commit> 来做到这一点
阅读:敏捷面试问答
Q.16) 什么是 SubGit?
它是一个允许从 SVN 迁移到 Fit 的工具。 它创建本地或远程 Subversion 存储库的可写 Git 镜像,并根据需要使用 Subversion 和 Git。 您可以使用 SubGit 创建现有 Subversion 存储库的双向 Git-SVN 镜像。 您还可以快速从 Subversion 一次性导入到 Git。

Q.17) git pull 命令和 git fetch 命令有什么区别?
Git pull 命令从中央存储库的精确分支检索所有新更改或提交,并更新本地存储库中的目标分支。
Git fetch 命令用于类似但有细微差别的东西。 当您获取时,它会从一个精确的分支中检索所有新提交,并将其保存在本地存储库的新分支中。 如果您希望在目标分支中反映这些更改,则必须调用 git merge。
因此,Git pull = git fetch + git merge。
Q.18) Git 中的“索引”或“暂存区”是什么?
在提交之前可以对更改进行格式化或审查的中间区域称为 Git 中的索引或暂存区域。
Q.19) 什么是 git stash? 你如何应用它?
有时必须暂停一项工作,因为您必须优先处理其他分支。 半途而废的工作不能提交,因为它还没有到那个完整的阶段,但你确实想在短时间内回来工作。 要解决此问题,请使用 git slash 提供帮助。
它将它保存在一堆未完成的更改中,您可以稍后完成并提交。 要回到这项工作,您需要做的就是调用 git stash 来应用命令。 它会将您的工作从您离开的位置提取到您的工作目录。
Q. 20) git diff 与 'git status' 有何不同?
'git diff' 几乎类似于 'git status'; 他们唯一的区别是前者揭示了各种提交之间的差异。 '
Q.21) 'git remote' 与'git clone' 有何不同?
如果您希望在您的 git 配置中创建一个提及特定 URL 名称的条目,请使用“git remote add”。 另一方面,“git clone”通过复制位于 URL 的现有存储库来创建一个新的 git 存储库。
阅读:顶级 React 面试问题和答案
Q.22) 描述分支策略
每家公司都有自己的分支战略。 以下是一些流行的:
- 特性分支——特性分支模型保存了对分支内特定特性所做的所有更改。 只有经过彻底的测试,这个分支才会与它的主分支合并。
- 发布分支——一旦开发分支达到了可以发布的程度; 您可以克隆或复制它以形成发布分支。 克隆后,不会添加任何新功能。 您只能修复错误、记录错误或执行与版本改进相关的此类活动。 一旦经过测试,它就会与它的 master 合并并获得一个版本号。 此外,它应该被合并回开发分支,该分支可能自发布以来已经向前推进。
- 任务分支——在此模型中,每个任务都在其单独的分支上执行,任务键保存在分支名称中。 通过在分支名称中查找任务键,可以清楚地看到哪个代码执行了哪个任务。
Q.23) 解释 Gitflow 工作流程?
Gitflow 通过使用两个长期运行的并行分支(主分支和开发分支)来存储特定项目的历史记录:
- 大师 - 这是准备去分支。 一切都在这个分支上测试和批准。
- Hotfix – 这些分支用于快速修补生产版本。 它们几乎就像您的功能分支和发布分支; 此外,它们是基于master而不是develop。
- 开发 - 所有功能分支都合并到此分支中。 这些是经过测试的。 只有经过严格测试,才与master分支合并。
- 特性——每个新特性都应该放在自己的分支中,然后将其推送到它们的父分支,即开发分支。
Q. 24) 如何判断一个分支是否合并到 master?
以下命令可帮助您了解它们是否已合并:
git branch –merged – 列出所有已合并到当前分支的分支。 然后你可以看看是不是。
git branch –no-merged – 或者,您可以使用此命令检查所有未与其主分支合并的分支。
Q.25) 如何在不从文件系统中删除的情况下从 git 中删除文件?
在将文件添加到 Git 时需要小心,以免最终添加错误的文件。 命令 git rm 将从暂存区和文件系统中删除它,因此您需要改用 git reset 命令。
您可以使用 git reset 文件名或 echo 文件名 >> .gitingore
Q.26) 解释 Git 中的变基和合并?
您使用 rebase 命令将编辑从一个分支集成到另一个分支。 它用作合并命令的替代方法。 它是“合并”命令的替代方法。 它与合并不同,因为它重写了提交历史,以便给出一个直接的、有安排的连续提交。
高级 Git 面试问题:
Q.27) 你如何将最后的 N 个提交压缩成一个提交?
有两种方法可以将最后 N 次提交压缩为单个提交,它们是:
如果您希望从头开始创建新的提交消息,可以使用以下命令:
git reset –soft HEAD~N &&git commit
如果您只想使用现有提交消息的串联来编辑新的提交消息,那么您需要使用以下命令获取这些消息并将它们传递给 Git 提交:
git reset –soft HEAD~N &&git commit –edit -m”$(git log –format=%B –reverse .HEAD@{N} )”
Q.28) 将 Jenkins 与 Git 集成的步骤是什么?
Step1:您需要点击Jenkins仪表板来管理Jenkins按钮。
第 2 步:单击管理插件按钮。
第 3 步:在插件页面中,您需要选择 GIT 插件。 点击安装,无需重启。 该插件会根据您的 Internet 速度自动下载。
Q.29) 解释什么是 Git bisect,以及如何使用它来找到错误的根源?
使用 Git bisect,您可以通过使用二进制搜索找出哪个提交导致了错误。 Git bisect 的命令是 git bisect <subcommand> <options>
二进制搜索算法,此命令首先查找导致错误的提交。 Git bisect 在引入错误的两个端点之间选择一个提交。 你需要你可以确定一个好的提交和一个坏的提交。 它继续过滤它,直到找到确切的提交。

Q.30) 解释一个 git reflog?
“reflog”命令有助于跟踪对存储库引用所做的每一次编辑。 它保留分支的数据历史记录,甚至为在本地或外部创建的分支保留标签。
此命令必须在缺少分支的存储库中执行。 在远程存储库的情况下,您需要在拥有分支的程序员系统上运行 reflog 命令。
从世界顶级大学获得软件工程学位。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
结论
我们希望 Git Hub 面试问题可以帮助您获得梦想的工作。 这些是面试官最常问到的 Git 问题。 我们祝您面试顺利!
