我在工作中很喜歡 Git 。 Git 在許多開發團隊中扮演著重要的角色,並且是不可或缺的技術。因此,準備了一些常見的Git面試問題。
關於 Git 面試的第一個問題必須是:
1. Git和SVN有什麼不同?
Git | #SVN |
---|---|
#1. Git是一個分散式的版本控制工具 | |
##2.它屬於第3代版本控制工具 | 2.它屬於第2代版本控制工具 |
#3.用戶端可以在其本機系統上複製整個儲存庫 | 3.版本歷史記錄儲存在伺服器端儲存庫中 |
4.即使離線也可以提交 | 4.只允許線上提交 |
5.Push/pull 操作更快 | 5.Push/pull 操作較慢 |
6.工程可以用commit 自動共享 | 6.沒有任何東西自動共享 |
2. 什麼是Git?
我建議你先透過了解git 的架構再來回答這個問題,如下圖所示,試著解釋一下這個圖:
● Git 是分散式版本控制系統(DVCS)。它可以追蹤檔案的更改,並允許你恢復到任何特定版本的更改。
● 與 SVN 等其他版本控制系統(VCS)相比,其分散式架構具有許多優勢,一個主要優點是它不依賴中央伺服器來儲存專案文件的所有版本。
● 每個開發人員都可以「克隆」我在圖中用「Local repository」標註的儲存庫的副本,並且在他的硬碟上具有項目的完整歷史記錄,因此當伺服器中斷時,你需要的所有恢復資料都在你隊友的本地Git 儲存庫中。
● 還有一個中央雲端儲存庫,開發人員可以向其提交更改,並與其他團隊成員進行共享,如圖所示,所有協作者都在提交更改「遠端儲存庫」。
下一組Git 面試問題將測試你使用Git 的體驗:
##3. 在Git 中提交的命令是什麼?
答案非常簡單。用於寫入提交的命令是
git commit -a。
-a 標誌, 透過在命令列上加
-a 指示 git 提交已修改的所有被追蹤檔案的新內容。也要提一下,如果你是第一次需要提交新文件,可以在在
git commit -a 之前先
git add 。
4. 什麼是 Git 中的「裸儲存庫」?
你應該說明 「工作目錄」 和 「裸儲存庫」 之間的差異。 Git 中的 「裸」 儲存庫只包含版本控制資訊而沒有工作檔案(沒有工作樹),而且它不包含特殊的.git 子目錄。相反,它直接在主目錄本身包含
.git 子目錄中的所有內容,其中工作目錄包括:
.git 子目錄,其中包含你的倉庫所有相關的Git 修訂歷史記錄。
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></name>
7. git pull 和 git fetch 有什麼差別?
git pull 命令從中央儲存庫中提取特定分支的新變更或提交,並更新本機儲存庫中的目標分支。
也用於相同的目的,但它的工作方式略有不同。當你執行 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:
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></options></subcommand>
既然你已经提到过上面的命令,那就解释一下这个命令会做什么。
此命令用了二进制搜索算法来查找项目历史记录中的哪个提交引入了错误。你可以通过告诉它已知包含该错误的“错误”提交以及在引入错误之前已知的“良好”提交来使用它。然后 git bisect 在这两个端点之间选择一个提交,并询问你所选的提交是“好”还是“坏”。它继续缩小范围,直到找到引入更改的确切提交。
17. 如果想要在提交之前运行代码性检查工具,并在测试失败时阻止提交,该怎样配置 Git 存储库?
我建议你先介绍一下完整性检查。
完整性或冒烟测试用来确定继续测试是否可行和合理。
下面解释如何实现这一目标。
这可以通过与存储库的 pre-commit hook 相关的简单脚本来完成。git 会在提交之前触发 pre-commit 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 完成。
推荐学习:git教程
以上是關於 Git 的 20 個面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

GitHub是一个面向开源及私有软件项目的托管平台,可以让开发者们在这里托管自己的代码,并进行版本控制。GitHub主打的是开源项目与协作,通过这个平台上的开源项目,开发者们可以查看其他开发者的项目源代码,并进行交流和学习。

在git中,“push -u”的意思是将本地的分支版本上传到远程合并,并且记录push到远程分支的默认值;当添加“-u”参数时,表示下次继续push的这个远端分支的时候推送命令就可以简写成“git push”。

GitLab是一种基于Web的Git版本控制库管理软件,旨在帮助开发团队更好地协同工作,提高工作效率。当您第一次登录GitLab时,系统会提示您要更改初始密码以确保账户安全。本文将为大家介绍如何在GitLab上进行第一次登录并更改密码。

在git中,pack文件可以有效的使用磁盘缓存,并且为常用命令读取最近引用的对象提供访问模式;git会将多个指定的对象打包成一个成为包文件(packfile)的二进制文件,用于节省空间和提高效率。

git中pull失败的解决方法:1、利用“git reset --hard”强制覆盖掉自己的本地修改;2、利用“git stash”推送一个新的储藏,拉取之后利用“git stash pop”将修改保存到暂存区;3、若依然出现问题,则将文件保存到暂存区并提交注释即可。

git分支能改名字。改名方法:1、利用git中的branch命令修改本地分支的名称,语法为“git branch -m 旧名字 新名字”;2、利用“git push origin 新名字”命令,在删除远程分支之后将改名后的本地分支推送到远程;3、利用IDEA直接操作修改分支名称即可。

git删除某个分支的方法:1、利用“git branch --delete dev”命令删除本地分支;2、利用“git push origin --delete branch”命令删除远程分支;3、利用“git branch --delete --remotes”命令删除追踪分支。

本篇文章给大家带来了关于git的相关知识,其中主要跟大家聊一聊怎么让你的git记录保持整洁,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版