【10】进大厂必须掌握的面试题-版本控制面试 (2)

创建一个新的提交来撤消在错误的提交中所做的所有更改。为此,我将使用命令
git revert <错误的提交的名称>

Q8。您如何将最后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})”

Q9。什么是Git bisect?您如何使用它来确定(回归)错误的来源?

我建议您首先给Git bisect一个小的定义,Git bisect用于通过二进制搜索来查找引入了bug的提交。Git bisect的命令是
**git bisect

**现在,既然您已经提到了上面的命令,请解释该命令的作用。该命令使用二进制搜索算法来查找项目历史记录中的哪个提交引入了错误。您通过首先告诉它包含臭虫的“坏”提交和引入臭虫之前的“好”提交来使用它。然后,Git bisect在这两个端点之间选择一个提交,并询问您所选择的提交是“好”还是“坏”。它会继续缩小范围,直到找到引入更改的确切提交为止。

Q10。什么是Git rebase?如何在合并之前将其用于解决功能分支中的冲突?

据我说,您应该首先说git rebase是一个命令,它将把另一个分支合并到您当前正在工作的分支中,然后将所有在rebased分支之前的本地提交移动到该历史的顶部科。
现在,您已经为示例定义了Git变基时间,以展示如何在合并之前使用它解决特征分支中的冲突(如果从master创建了一个功能分支,并且从那时起master分支已收到新的提交,Git变基)可用于将要素分支移至母版的顶端。
该命令将有效地重放主节点顶端的功能分支中所做的更改,从而使冲突得以解决。谨慎完成后,这将使功能分支可以相对轻松地合并到master中,有时甚至可以作为简单的快进操作。

Q11。您如何配置Git存储库以在提交之前运行代码完整性检查工具,并在测试失败后阻止它们?

我建议您先简要介绍一下健全性检查。健全性测试或冒烟测试确定了继续测试是否可行和合理。
现在说明如何实现此目的,这可以通过与存储库的预提交挂钩相关的简单脚本来完成。在提交之前,甚至在要求您输入提交消息之前,都会触发预提交挂钩。在此脚本中,可以运行其他工具,例如linters,并对提交到存储库中的更改执行完整性检查。

Q12。您如何找到在特定提交中已更改的文件的列表?

对于此答案,而不仅仅是告诉命令,请解释此命令的确切作用,这样可以说:要获取在特定提交中已更改的列表文件,请使用命令
git diff-tree -r {hash}
给定提交哈希,这将列出该提交中已更改或添加的所有文件。-r标志使命令列出单个文件,而不是仅将它们折叠为根目录名称。
您还可以包括以下提及的要点,尽管它是完全可选的,但将有助于打动面试官。
输出还将包含一些额外的信息,可以通过包含两个标志来轻松抑制它们:
git diff-tree –no-commit-id –name-only -r {hash}
在这里,–no-commit-id将禁止在输出中显示提交哈希,并且–name-only将仅显示文件名,而不是其路径。

Q13。您如何设置一个脚本,以便每次存储库通过推送接收到新的提交时运行?

可以通过三种方式配置脚本,以便每次存储库通过推送接收到新的提交时都运行该脚本,一种方法是根据确切何时需要触发脚本来定义预接收,更新或后接收钩子。

将提交推送到目标存储库中时,将调用预接收钩子。绑定到此钩子的任何脚本将在更新任何引用之前执行。这是运行有助于执行开发策略的脚本的有用钩子。

更新挂钩的工作方式与预接收挂钩类似,并且在实际进行任何更新之前也会被触发。但是,对于每次推送到目标存储库的提交,都会调用一次更新挂钩。

最后,在将更新接受到目标存储库之后,将调用存储库中的接收后挂钩。这是配置简单部署脚本,调用某些持续集成系统,将通知电子邮件发送到存储库维护者等的理想场所。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxzwx.html