Java——《面试题——Git篇》

news2024/9/24 7:23:26

全文章节

Java——《面试题——基础篇》

Java——《面试题——JVM篇》

Java——《面试题——多线程&并发篇》

Java——《面试题——Spring篇》

Java——《面试题——SpringBoot篇》

Java——《面试题——MySQL篇》​​​​​​

Java——《面试题——SpringCloud》

Java——《面试题——Dobbo篇》

Java——《面试题——Nginx篇》

 Java——《面试题——MQ篇》

 Java——《面试题——Linux篇》

Java——《面试题——Zookeeper篇》

Java——《面试题——Redis篇》

Java——《面试题——分布式篇》

 Java——《面试题——网络篇》

Java——《面试题——设计模式篇》

Java——《面试题——maven篇》

Java——《面试题——ElasticSearch篇》

Java——《面试题——tomcat篇》​​​​​​

Java——《面试题——Git篇》

Java——《面试题——软实力篇》

本文目录

         1、Git和SVN有什么区别?

2、什么是Git?

3、在 Git 中提交的命令是什么?

4、什么是 Git 中的“裸存储库”?

5 Git 是用什么语言编写的?

6、在Git中,你如何还原已经 push 并公开的提交?

7、git pull 和 git fetch 有什么区别?

8、git中的“staging area”或“index”是什么?

9、什么是 git stash?

10、什么是git stash drop?

11、如何找到特定提交中已更改的文件列表?

12、git config 的功能是什么?

13、提交对象包含什么?

14、 如何在Git中创建存储库?

15、怎样将 N 次提交压缩成一次提交?

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

17、如果想要在提交之前运行代码性检查工具,并在测试失败时 阻止提交,该怎样配置 Git 存储库?

18、描述一下你所使用的分支策略?

19、如果分支是否已合并为master,你可以通过什么手段知道?

20、 什么是SubGit?

21、列举工作中常用的几个git命令?

22、如果本次提交误操作,如何撤销?

23、你使用过git stash命令吗?你一般什么情况下会使用它?

24、如何查看分支提交的历史记录?查看某个文件的历史记录呢?

25、使用过git merge和git rebase吗?它们之间有什么区别?

26、使用过git cherry-pick,有什么作用?


1、Git和SVN有什么区别?

 2、什么是Git?

我建议你先通过了解 git 的架构再来回答这个问题,如下图所示,试着解释一下这个图:

  • Git 是分布式版本控制系统(DVCS)。它可以跟踪文件的更改,并允许你恢复到任何特定版本 的更改。
  • 与 SVN 等其他版本控制系统(VCS)相比,其分布式架构具有许多优势,一个主要优点是它不 依赖于中央服务器来存储项目文件的所有版本。
  • 每个开发人员都可以“克隆”我在图中用“Local repository”标注的存储库的副本,并且在他的硬 盘驱动器上具有项目的完整历史记录,因此当服务器中断时,你需要的所有恢复数据都在你队 友的本地 Git 存储库中。
  • 还有一个中央云存储库,开发人员可以向其提交更改,并与其他团队成员进行共享,如图所 示,所有协作者都在提交更改“远程存储库”。

3、在 Git 中提交的命令是什么?

答案非常简单。 用于写入提交的命令是 git commit -a。

现在解释一下 -a 标志, 通过在命令行上加 -a 指示 git 提交已修改的所有被跟踪文件的新内容。 还要提一下,如果你是第一次需要提交新文件,可以在在 git commit -a 之前先 git add 。

4、什么是 Git 中的“裸存储库”?

你应该说明 “工作目录” 和 “裸存储库” 之间的区别。

Git 中的 “裸” 存储库只包含版本控制信息而没有工作文件(没有工作树),并且它不包含特殊的 .git 子目录。相反,它直接在主目录本身包含 .git 子目录中的所有内容,其中工作目录包括:

  1. 一个 .git 子目录,其中包含你的仓库所有相关的 Git 修订历史记录。
  2. 工作树,或签出的项目文件的副本。

5 Git 是用什么语言编写的?

你需要说明使用它的原因,而不仅仅是说出语言的名称。我建议你这样回答:

Git使用 C 语言编写。 GIT 很快,C 语言通过减少运行时的开销来做到这一点。

6、在Git中,你如何还原已经 push 并公开的提交?

There can be two answers to this question and make sure that you include both because any of the below options can be used depending on the situation: 1 这个问题可以有两个答案,你 回答时也要保包含这两个答案,因为根据具体情况可以使用以下选项:

  • 删除或修复新提交中的错误文件,并将其推送到远程存储库。这是修复错误的最自然方式。对 文件进行必要的修改后,将其提交到我将使用的远程存储库

git commit -m "commit message"

  • 创建一个新的提交,撤消在错误提交中所做的所有更改。可以使用命令:

git revert <name of bad commit>

7、git pull 和 git fetch 有什么区别?

git pull 命令从中央存储库中提取特定分支的新更改或提交,并更新本地存储库中的目标分支。

git fetch 也用于相同的目的,但它的工作方式略有不同。当你执行 git fetch 时,它会从所需 的分支中提取所有新提交,并将其存储在本地存储库中的新分支中。如果要在目标分支中反映这些 更改,必须在 git fetch 之后执行 git merge 。只有在对目标分支和获取的分支进行合并后才会 更新目标分支。为了方便起见,请记住以下等式:

git pull = git fetch + git merge

8、git中的“staging area”或“index”是什么?

For this answer try to explain the below diagram as you can see: 可以通过下图进行解释:

在完成提交之前,可以在称为“staging area”或“index”的中间区域中对其进行格式化和审查。从图 中可以看出,每个更改首先在暂存区域中进行验证,我将其称为“stage file”,然后将更改提交到存 储库。

 9、什么是 git stash?

首先应该解释 git stash 的必要性

通常情况下,当你一直在处理项目的某一部分时,如果你想要在某个时候切换分支去处理其他事 情,事情会处于混乱的状态。问题是,你不想把完成了一半的工作的提交,以便你以后就可以回到 当前的工作。解决这个问题的答案是 git stash。

再解释什么是git stash。

stash 会将你的工作目录,即修改后的跟踪文件和暂存的更改保存在一堆未完成的更改中,你可以 随时重新应用这些更改。

10、什么是git stash drop?

通过说明我们使用 git stash drop 的目的来回答这个问题。

git stash drop 命令用于删除隐藏的项目。默认情况下,它将删除最后添加的存储项,如果提供 参数的话,它还可以删除特定项。

下面举个例子。

如果要从隐藏项目列表中删除特定的存储项目,可以使用以下命令:

git stash list:它将显示隐藏项目列表,如:

stash@{0}: WIP on master: 049d078 added the index file stash@{1}: WIP on master: c264051 Revert “added file_size” stash@{2}: WIP on master: 21d80a5 added number to log

如果要删除名为 stash@{0} 的项目,请使用命令 git stash drop stash@{0}。

11、如何找到特定提交中已更改的文件列表?

对于这个问题,不能仅仅是提供命令,还要解释这个命令究竟做了些什么。

要获取特定提交中已更改的列表文件,请使用以下命令:

git diff-tree -r {hash}

给定提交哈希,这将列出在该提交中更改或添加的所有文件。 -r 标志使命令列出单个文件,而不 是仅将它们折叠到根目录名称中。

你还可以包括下面提到的内容,虽然它是可选的,但有助于给面试官留下深刻印象。

输出还将包含一些额外信息,可以通过包含两个标志把它们轻松的屏蔽掉:

git diff-tree –no-commit-id –name-only -r {hash}

这里 -no-commit-id 将禁止提交哈希值出现在输出中,而 -name-only 只会打印文件名而不是它们 的路径。

12、git config 的功能是什么?

首先说明为什么我们需要 git config 。

git 使用你的用户名将提交与身份相关联。 git config 命令可用来更改你的 git 配置,包括你的用 户名。

下面用一个例子来解释。

假设你要提供用户名和电子邮件 ID 用来将提交与身份相关联,以便你可以知道是谁进行了特定提 交。为此,我将使用:

git config –global user.name "Your Name": 此命令将添加用户名。

git config –global user.email "Your E-mail Address": 此命令将添加电子邮件ID。

13、提交对象包含什么?

Commit 对象包含以下组件,你应该提到以下这三点:

  • 一组文件,表示给定时间点的项目状态
  • 引用父提交对象
  • SHAI 名称,一个40个字符的字符串,提交对象的唯一标识。

14、 如何在Git中创建存储库?

这可能是最常见的问题,答案很简单。

要创建存储库,先为项目创建一个目录(如果该目录不存在),然后运行命令 git init。通过运行此 命令,将在项目的目录中创建 .git 目录。

15、怎样将 N 次提交压缩成一次提交?

将N个提交压缩到单个提交中有两种方式:

  • 如果要从头开始编写新的提交消息,请使用以下命令:

git reset –soft HEAD~N &&

git commit

  • 如果你想在新的提交消息中串联现有的提交消息,那么需要提取这些消息并将它们传给 git commit,可以这样:

git reset –soft HEAD~N &&

git commit –edit -m"$(git log –format=%B –reverse .HEAD@{N})"

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

我建议你先给出一个Git bisect 的小定义。

Git bisect 用于查找使用二进制搜索引入错误的提交。 Git bisect的命令是

git bisect <subcommand> <options>

既然你已经提到过上面的命令,那就解释一下这个命令会做什么。

此命令用了二进制搜索算法来查找项目历史记录中的哪个提交引入了错误。你可以通过告诉它已知 包含该错误的“错误”提交以及在引入错误之前已知的“良好”提交来使用它。然后 git bisect 在这两个 端点之间选择一个提交,并询问你所选的提交是“好”还是“坏”。它继续缩小范围,直到找到引入更改 的确切提交。

17、如果想要在提交之前运行代码性检查工具,并在测试失败时 阻止提交,该怎样配置 Git 存储库?

我建议你先介绍一下完整性检查。

完整性或冒烟测试用来确定继续测试是否可行和合理。

下面解释如何实现这一目标。

这可以通过与存储库的 pre-commit hook 相关的简单脚本来完成。git 会在提交之前触发 precommit hook。你可以在这个脚本中运行其他工具,例如 linters,并对提交到存储库中的更改执行 完整性检查。

最后举个例子,你可以参考下面的脚本:

#!/bin/sh
files=$(git diff –cached –name-only –diff-filter=ACM | grep ‘.go$’)
if [ -z files ]; then
     exit 0
fi
unfmtd=$(gofmt -l $files)
if [ -z unfmtd ]; then
     exit 0
fi
echo “Some .go files are not fmt’d”
exit 1

这段脚本检查是否需要通过标准 Go 源代码格式化工具 gofmt 传递所有即将提交的 .go 文件。如果 脚步以非 0 状态退出,脚本会有效地阻止提交操作。

18、描述一下你所使用的分支策略?

这个问题被要求用Git来测试你的分支经验,告诉他们你在以前的工作中如何使用分支以及它的用途 是什么,你可以参考以下提到的要点:

功能分支(Feature branching)

要素分支模型将特定要素的所有更改保留在分支内。当通过自动化测试对功能进行全面测试和 验证时,该分支将合并到主服务器中。

任务分支(Task branching)

在此模型中,每个任务都在其自己的分支上实现,任务键包含在分支名称中。很容易看出哪个 代码实现了哪个任务,只需在分支名称中查找任务键。

发布分支(Release branching)

一旦开发分支获得了足够的发布功能,你就可以克隆该分支来形成发布分支。创建该分支将会 启动下一个发布周期,所以在此之后不能再添加任何新功能,只有错误修复,文档生成和其他 面向发布的任务应该包含在此分支中。一旦准备好发布,该版本将合并到主服务器并标记版本 号。此外,它还应该再将自发布以来已经取得的进展合并回开发分支。

最后告诉他们分支策略因团队而异,所以我知道基本的分支操作,如删除、合并、检查分支等。

19、如果分支是否已合并为master,你可以通过什么手段知道?

答案很直接。

要知道某个分支是否已合并为master,你可以使用以下命令:

git branch –merged 它列出了已合并到当前分支的分支。

git branch –no-merged 它列出了尚未合并的分支。

20、 什么是SubGit?

SubGit 是将 SVN 到 Git迁移的工具。它创建了一个可写的本地或远程 Subversion 存储库的 Git 镜 像,并且只要你愿意,可以随意使用 Subversion 和 Git。

这样做有很多优点,比如你可以从 Subversion 快速一次性导入到 Git 或者在 Atlassian Bitbucket Server 中使用SubGit。我们可以用 SubGit 创建现有 Subversion 存储库的双向 Git-SVN 镜像。你 可以在方便时 push 到 Git 或提交 Subversion。同步由 SubGit 完成。

21、列举工作中常用的几个git命令?

新增文件的命令:git add file或者git add .

提交文件的命令:git commit –m或者git commit –a

查看工作区状况:git status –s

拉取合并远程分支的操作:git fetch/git merge或者git pull

查看提交记录命令:git reflog

22、如果本次提交误操作,如何撤销?

如果想撤销提交到索引区的文件,可以通过git reset HEAD file;

如果想撤销提交到本地仓库的文 件,可以通过git reset –soft HEAD^n恢复当前分支的版本库至上一次提交的状态,索引区和工作 空间不变更;

可以通过git reset –mixed HEAD^n恢复当前分支的版本库和索引区至上一次提交的

23、你使用过git stash命令吗?你一般什么情况下会使用它?

命令git stash是把工作区修改的内容存储在栈区。 以下几种情况会使用到它:

解决冲突文件时,会先执行git stash,然后解决冲突;

遇到紧急开发任务但目前任务不能提交时,会先执行git stash,然后进行紧急任务的开发,然 后通过git stash pop取出栈区的内容继续开发;

切换分支时,当前工作空间内容不能提交时,会先执行git stash再进行分支切换;

24、如何查看分支提交的历史记录?查看某个文件的历史记录呢?

查看分支的提交历史记录:

  • 命令git log –number:表示查看当前分支前number个详细的提交历史记录;
  • 命令git log –number –pretty=oneline:在上个命令的基础上进行简化,只显示sha-1码和提交 信息;
  • 命令git reflog –number: 表示查看所有分支前number个简化的提交历史记录;
  • 命令git reflog –number –pretty=oneline:显示简化的信息历史信息; 如果要查看某文件的提交历史记录,直接在上面命令后面加上文件名即可。 注意:如果没有number则显示全部提交次数。

25、使用过git merge和git rebase吗?它们之间有什么区别?

简单的说,git merge和git rebase都是合并分支的命令。 git merge branch会把branch分支的差异 内容pull到本地,然后与本地分支的内容一并形成一个committer对象提交到主分支上,合并后的 分支与主分支一致; git rebase branch会把branch分支优先合并到主分支,然后把本地分支的 commit放到主分支后面,合并后的分支就好像从合并后主分支又拉了一个分支一样,本地分支本身 不会保留提交历史。

26、使用过git cherry-pick,有什么作用?

命令git cherry-pick可以把branch A的commit复制到branch B上。 在branch B上进行命令操作:

  • 复制单个提交:git cherry-pick commitId
  • 复制多个提交:git cherry-pick commitId1…commitId3     注意:复制多个提交的命令不包含commitId1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识操作系统以及Linux常用指令(上)

目录 一&#xff1a;操作系统简介 二&#xff1a;Linux简介 Linux是什么 Linux的作用 非图形化的Linux界面 Linux环境的搭建 三&#xff1a;Linux下的文件结构 ⭐Linux组织文件的结构为多叉树 文件路径 Linux下的隐藏文件 四&#xff1a;Linux基础指令 创建用户相…

实践:devops之云主机模式持续部署(ci-cd)

实践&#xff1a;devops之云主机模式持续部署(ci-cd) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 0、流程分析 2条Jenkins pipeline CI pipeline CD pipeline 标准规范 项目规范与总体设计 公司里面要使用流水线要做持续集成CI/CD的项目越来…

02-基础入门-数据包拓展

基础入门-数据包拓展 基础入门-数据包拓展1、http/https数据包&#xff08;1&#xff09;HTTP协议是什么&#xff1f;&#xff08;2&#xff09;HTTP原理&#xff08;3&#xff09;HTTP特点&#xff08;4&#xff09;URI和URL的区别&#xff08;5&#xff09;HTTP报文组成&…

IP路由协议(RIP、IGRP、OSPF、IS-IS、BGP)

文章目录 1、路由分类2、RIP协议1&#xff09;RIP的工作原理2&#xff09;RIP路由表的更新过程3&#xff09;RIP路由表的更新原则4&#xff09;RIP的特性5&#xff09;RIP协议的版本 4、IGRP协议1&#xff09;IGRP路由表的更新2&#xff09;IGRP的度量标准 5、OSPF协议1&#x…

Java【动态规划】斐波那契数列模型, 图文详解 + 代码

文章目录 一、第 N 个泰波那契数1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 二、三步问题1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 三、1, 题目2, 思路分析2.1, 状态…

Redis 高可用和优化

目录 一&#xff1a;Redis 高可用 二&#xff1a; Redis 持久化 1、持久化的功能 2、Redis 提供两种方式进行持久化 3、 RDB 持久化 &#xff08;1&#xff09;触发条件 &#xff08;1.1&#xff09;手动触发 &#xff08;1.2&#xff09;自动触发 &#xff08;1.3&am…

软件测试岗位之大厂到底有多累?

今天给大家分享两个朋友的故事&#xff0c;他们分别在国内两家顶尖的互联网大厂&#xff0c;一个在头条&#xff0c;一个在蚂蚁。 头条的故事 头条的主人公&#xff0c;在入职后的一年里&#xff0c;晚上十点半下班是比较早了&#xff0c;基本上都是十一点半左右下班&#xff…

Redmi4X刷入Ubuntu touch真正成为一台远程无需人操作的云服务器(就是配置垃圾)

前言 前几天把高一买的手机相册和文件拷贝到了电脑上&#xff0c;寻思这旧手机还能干嘛&#xff0c;搜了一下有做监控的&#xff0c;行车记录仪的&#xff0c;最后决定还是做Linux服务器香啊。用了一天时间参考网上的教程做完了&#xff0c;自己再做一下总结和一些弯路记录。 …

ctemplate

参考安装 原理&#xff1a; 如何使用&#xff1f; // test_ctemplate.cc #include <iostream> #include <string> #include <ctemplate/template.h>int main() {std::string in_html "./test.html";std::string value "一行白鹭上青天&q…

一、设计模式的作用和六大原则

文章目录 引言1.设计模式1.1 设计模式的目的1.2 设计模式六大原则1.2.1 单一职责原则&#xff08;类、方法和接口&#xff0c;保持职责单一性&#xff0c;如:Activity和Adapter分成两个类&#xff09;1.2.2. 开闭原则&#xff08;扩展开放&#xff0c;修改关闭&#xff1b;如&a…

python 数字进制

python 数字进制 1、数学中进制对应代码2、Python进制转换函数 1、数学中进制对应代码 十六进制&#xff1a; 0x11 八进制&#xff1a; 0o11 二进制&#xff1a; 0b11 十进制&#xff1a; 11&#xff08;啥都不加默认为十进制&#xff09; #!/usr/bin/python # -*- coding: UTF…

第133页的gtk+编程例子——编写计算器应用

第133页的gtk编程例子——编写计算器应用 以下gtk编程例子是来自书籍《实用技术&#xff1a;开发Linux应用——用GTK和GDK开发Linux图形用户界面应用》第133页的内容——编写计算器应用 例子程序是在gtk2.0编译的&#xff0c;已经修改许多地方才能在gtk3.0编译通过&#xff0c…

数学建模——插值(上)

本文是面向数学建模准备的&#xff0c;是介绍性文章&#xff0c;没有过多关于原理的说明&#xff01;&#xff01;&#xff01; 插值方法简介 插值问题 已知区间[a,b]上有系列观测值(xi,yi),i0,1,2,…,n&#xff0c;求一条曲线把这些点依次连接起来&#xff0c;称为插值&#…

在idea中高并发下的分布式锁以及解决方法

案例:1.互联网秒杀 2.抢优惠卷 3.接口幂 引入pom文件 <packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.8.RELEA…

分布式软件架构——客户端缓存

浏览器的客户端缓存 当万维网刚刚出现的时候&#xff0c;浏览器的缓存机制差不多就已经存在了。在 HTTP 协议设计之初&#xff0c;人们便确定了服务端与客户端之间“无状态”&#xff08;Stateless&#xff09;的交互原则&#xff0c;即要求客户端的每次请求是独立的&#xff…

MySQL环境搭建(Windows电脑)

MySQL环境搭建-Windows电脑篇 软件获取&#xff1a; 搜索gzh【李桥桉】&#xff0c;需要win电脑安装包&#xff0c;回复【win-MS】。 搜索gzh【李桥桉】&#xff0c;需要mac电脑安装包&#xff0c;回复【mac-MS】。 注意&#xff1a;确保电脑为64位系统&#xff08;不是的话需要…

华为手环8相册表盘使用指南

随着科技的发展&#xff0c;智能手环已经成为越来越多人的选择。华为手环8作为一款备受好评的智能手环&#xff0c;不仅具备精准的监测功能&#xff0c;还拥有丰富的表盘样式。本文将向您介绍华为手环8如何使用相册表盘&#xff0c;通过这一功能&#xff0c;您可以轻松地将您的…

Windows 打开cmd/dos窗口的12种方式(全网最全)

文章目录 1. 从开始菜单的应用列表打开2. 从搜索打开3. 从运行打开4. 从文件资源管理器打开5. 从C:\Windows\System32\cmd.exe打开6. 从桌面>快捷方式打开&#xff08;需自己创建&#xff09;7. 从任务栏>快捷方式打开&#xff08;需自己创建&#xff09;8. 从开始菜单&g…

TV快应用系列——1.ExtScreen框架快速入门

系列文章目录 TV快应用系列——1.ExtScreen框架快速入门 ExtScreen框架快速入门 系列文章目录前言一、ExtScreen简介整体结构扩展屏和应用的区别 二、安装和环境配置1.安装编辑工具2.安装Vue开发环境1.1.1安装 Node1.1.2安装配置 npm下载安装npmnpm 设置淘宝镜像安装 vue-cli&…

图像分割的大变革:从SAM(分割一切)到FastSAM、MobileSAM

前言 SAM就是一类处理图像分割任务的通用模型。与以往只能处理某种特定类型图片的图像分割模型不同&#xff0c;SAM可以处理所有类型的图像。 在SAM出现前&#xff0c;基本上所有的图像分割模型都是专有模型。比如&#xff0c;在医学领域&#xff0c;有专门分割核磁图像的人工…