Git命令

时间:2020-01-09 10:38:45  来源:igfitidea点击:

1.我们如何看到GIT中的最新提交?

我们可以使用git log命令来查看最新的提交。
要查看最近的三个提交,我们使用以下命令:

git log -3

2.我们如何知道分支是否已合并到GIT的master中?

为此,我们可以使用以下命令:

git branch --merged master : This prints the branches merged into master
git branch --merged lists : This prints the branches merged into HEAD (i.e. tip of current branch)
git branch --no-merged : This prints the branches that have not been merged

默认情况下,这仅适用于本地分支机构。

  • 我们可以使用-a标志来显示本地和远程分支。

  • 或者我们可以使用-r标志仅显示远程分支。

3. git stash drop的目的是什么?

  • 如果我们不需要特定的存储,我们可以使用git stash drop命令将其从存储列表中删除。

  • 默认情况下,此命令将删除到最新添加的存储

  • 要删除特定的存储,我们在git stash drop命令中指定为参数。

4. GIT中的HEAD是什么?

  • HEAD是对当前已检出提交的引用。

  • 它是对我们已签出的分支的符号引用。

  • 在任何给定时间,都会选择一个头作为"当前头"。
    该头也称为HEAD(始终为大写)。

5. GIT中最受欢迎的分支策略是什么?

有很多方法可以在GIT中进行分支。
一种流行的方法是维护两个分支:

  • master:此分支用于生产。
    在此分支中,HEAD始终处于生产就绪状态。

  • develop:该分支用于开发。
    在此分支中,我们存储项目中开发的最新代码。
    这是进行中的代码。

一旦准备好将代码部署到生产中,就可以将其从developer分支合并到master分支中。

6.什么是SubGit?

  • SubGit是用于将SVN迁移到Git的软件工具。
    这是非常容易使用。
    通过使用它,我们可以创建Subversion存储库的可写Git镜像。

  • 它创建了一个双向镜像,可用于推送到Git以及提交到Subversion。

  • SubGit还负责Git和Subversion之间的同步。

7. git instaweb有什么用?

  • Git-instaweb是一个脚本,通过它我们可以在Web浏览器中浏览git存储库。

  • 它设置了gitweb和一个Web服务器,该服务器使工作存储库可以联机使用。

8.什么是git hooks?

  • Git挂钩是可以在Git存储库中发生事件时自动运行的脚本。
    这些用于GIT中工作流程的自动化。

  • Git钩子还有助于自定义GIT的内部行为。

  • 这些通常用于执行GIT提交策略。

9.什么是GIT?

  • GIT是成熟的分布式版本控制系统(DVCS)。
    它用于源代码管理(SCM)。

  • 它是开源软件。
    它由Linux操作系统的创建者Linus Torvalds开发。

  • GIT可与Eclipse,InteliJ等大量IDE(集成开发环境)很好地配合使用。

  • GIT可用于处理小型和大型项目。

10.什么是GIT中的存储库?

  • GIT中的存储库是我们存储软件工作的地方。

  • 它包含一个名为.git的子目录。
    项目根目录中只有一个.git目录。

  • .git中,GIT存储该存储库的所有元数据。
    .git目录的内容在GIT内部使用。

11. GIT的主要好处是什么?

GIT有以下主要优点:

  • "分布式系统:" GIT是分布式版本控制系统(DVCS)。
    因此,我们可以将私人作品保留在版本控制中,但对他人完全隐藏。
    我们也可以离线工作。

  • 灵活的工作流程:GIT允许我们创建自己的工作流程。
    我们可以使用适合项目的过程。
    我们可以使用集中式或者主从式或者任何其他工作流程。

  • "快速:"与其他版本控制系统相比,GIT的速度非常快。

  • 数据完整性:由于GIT使用SHA1,因此数据不容易损坏。

  • Free:它是免费供个人使用。
    如此众多的业余爱好者将其用于最初的项目。
    对于大型项目,它也可以很好地工作。

  • 协作:对于需要协作的项目,GIT非常易于使用。
    全球许多流行的开源软件都使用GIT。

12. GIT的缺点是什么?

GIT几乎没有缺点。
这些是难以使用GIT的情况。
其中一些是:

  • 二进制文件:如果我们的项目中有很多二进制文件(非文本),则GIT会变得非常慢。
    例如。
    包含大量图像或者Word文档的项目。

  • 陡峭的学习曲线:新手学习GIT需要一些时间。
    一些GIT命令对于新手来说是不直观的。

  • 远程速度慢:有时由于网络延迟而使远程存储库的使用速度变慢。
    在速度上,GIT仍然比其他VCS更好。

13. GIT和SVN之间的主要区别是什么?

GIT和SVN之间的主要区别是:

  • 去中心化:GIT是去中心化的。
    我们有一个本地副本,该副本是可以其中提交的存储库。
    在SVN中,我们必须始终连接到中央存储库以进行签入。

  • "学习复杂:"对于某些开发人员来说,学习GIT有点困难。
    它有更多的概念和命令需要学习。
    SVN更容易学习。

  • "无法处理二进制文件:" GIT处理频繁变化的大型二进制文件时,速度变慢。
    SVN可以轻松处理大型二进制文件。

  • 内部目录:GIT仅创建.git目录。
    SVN在每个文件夹中创建.svn目录。

  • 用户界面:GIT的UI不好。
    但是SVN具有良好的用户界面。

14.我们将如何为项目启动GIT?

  • 我们在现有项目目录中使用git init命令来启动项目的版本控制。

  • 之后,我们可以使用git add和git commit命令将文件添加到我们的GIT存储库中。

15.什么是GIT中的git clone?

  • 在GIT中,我们使用git clone命令创建一个现有副本。

  • 我们本地的GIT信息库。

  • 这是在开发人员之间创建存储库副本的最流行的方法。

  • 它类似于svn checkout。
    但是在这种情况下,工作副本是一个完整的存储库。

16.我们将如何在GIT中创建存储库?

  • 要在GIT中创建一个新的存储库,首先我们为项目创建一个目录。
    然后我们运行" git init"命令。

  • 现在,GIT在我们的项目目录中创建.git目录。
    这就是我们新的GIT存储库的创建方式。

17.在GIT中开始工作的方式有哪些?

我们可以通过以下方式在GIT中开始工作:

  • New Project:要创建一个新的仓库,我们使用git init命令。

  • 现有项目:要在现有存储库上工作,我们使用git clone命令。

18. GIT用哪种语言编写?

大多数GIT发行版都是用Bourne shell用C语言编写的。
一些命令是用Perl语言编写的。

19. GIT中的" git pull"命令在内部有什么作用?

  • 在GIT中,git pull首先在内部进行git提取,然后进行git合并。

  • 因此pull是两个命令的组合:fetchmerge

  • 我们使用git pull命令来使我们的本地分支与其远程版本保持最新。

20. GIT中的" git push"命令在内部有什么作用?

在GIT中,git push命令执行以下两个命令:

  • fetch:第一个GIT,将来自服务器的所有额外提交复制到本地仓库中,并将origin/master分支指针移到提交链的末尾。

  • merge:然后将origin/master分支合并到master分支中。
    现在,主分支指针移至新创建的提交。
    但是原点/主指针仍然在那里。

21.什么是git stash?

  • 在GIT中,有时我们不想提交代码,但也不想丢失未完成的代码。
    在这种情况下,我们使用git stash命令来记录工作目录和索引的当前状态。
    这会将未完成的工作存储在存储库中,并清除当前分支中未提交的更改。

  • 现在我们可以在一个干净的工作目录上工作了。

  • 稍后,我们可以使用存储并将这些更改应用回我们的工作目录。

  • 有时我们处于一些工作之中,不想丢失未完成的工作,我们使用git stash命令。

22. GIT中"阶段"的含义是什么?

  • 在GIT中,阶段是提交之前的一步。
    登台意味着文件已准备好提交。

  • 假设我们正在使用GIT的两个功能。
    其中一项功能已完成,而另一项尚未就绪。
    我们想承诺并在晚上离开家。
    但是我们可以提交,因为它们还没有完全准备好。
    在这种情况下,我们可以暂存已准备就绪的功能并提交该零件。
    第二项功能将继续进行。

23. git config命令的目的是什么?

我们可以使用git config命令设置GIT安装的配置选项。

24.我们如何查看GIT安装的配置设置?

我们可以使用" git config --list"命令来打印GIT安装中的所有GIT配置设置。

25.我们将如何在GIT中使用commit命令编写一条消息?

我们通过消息调用以下命令进行提交:

$ git commit –m

26. GIT的提交对象中存储了什么?

GIT提交对象包含以下信息:

  • SHA1名称:40个字符串,用于标识提交

  • 文件:代表特定时间点项目状态的文件列表

  • 参考:对父提交对象的任何引用

27.我们可以在GIT存储库中创建多少个主管?

存储库中可以有任意多个头。
默认情况下,GIT的每个存储库中都有一个称为HEAD的头。

28.为什么我们要在GIT中创建分支?

  • 如果我们同时从事多个任务,项目,缺陷或者功能,则需要多个分支。
    在GIT中,我们可以为每个单独的目的创建一个单独的分支。

  • 假设我们正在开发一个功能,为此我们创建了一个功能分支。
    在这两者之间,我们需要处理一个缺陷,然后为缺陷创建另一个分支并对其进行处理。
    缺陷工作完成后,我们将合并该分支,然后再次回到功能分支上进行工作。

  • 因此,处理多个任务是使用多个分支的主要原因。

29.在GIT中可以创建哪些不同的分支?

我们可以为GIT中的以下目的创建不同种类的分支:

  • 功能分支:这些用于开发功能。

  • 发布分支:这些用于将代码发布到生产环境。

  • 修补程序分支:用于将修补程序发布到生产中以进行缺陷修复或者紧急修复。

30.我们将如何在GIT中创建一个新分支?

我们使用以下命令在GIT中创建一个新分支:

$ git checkout –b

31.我们将如何向主分支添加新功能?

我们在从主分支创建的功能分支上进行开发工作。
一旦开发工作准备就绪,我们将使用git merge命令将其合并到master分支中。

32.什么是GIT中的拉取请求?

GIT中的拉取请求是已推送到GIT存储库的更改的列表。
通常,这些更改将在功能分支或者修补程序分支中推送。
推送这些更改后,我们创建一个包含在master和我们的功能分支之间的更改的拉取请求。
该拉取请求被发送给审阅者,以审阅代码,然后将其合并到开发或者发布分支中。

33.什么是GIT中的合并冲突?

  • GIT中的合并冲突是合并两个提交的结果。

  • 有时,要合并的提交和当前提交在同一位置有更改。
    在这种情况下,GIT无法确定哪个更改更重要。
    由于这个原因,GIT报告了合并冲突。
    这意味着合并不成功。
    我们可能必须手动检查并解决合并冲突。

34.我们如何解决GIT中的合并冲突?

当GIT报告文件中的合并冲突时,它将标记这些行,如下所示:

例子:

the business days in this week are
<<<<<<< HEAD five ======= six >>>>>>> branch-feature

为了解决文件中的合并冲突,我们编辑文件并修复冲突的更改。
在上面的示例中,我们可以保留五个或者六个。
编辑完文件后,我们运行" git add"命令,然后运行" git commit"命令。
由于GIT知道这是合并冲突,因此它将此更改链接到正确的提交。

35.我们将使用什么命令删除分支?

在主分支中成功合并功能分支后,我们不需要功能分支。

要删除不需要的分支,我们使用以下命令:

git branch –d

36.我们将使用什么命令来删除具有未合并更改的分支?

要强制删除具有未合并更改的不需要的分支,我们使用以下命令:

git branch –D

37.合并到GIT中的替代命令是什么?

合并到GIT中的另一种方法是重新定基。
它是通过git rebase命令完成的。

38.什么是GIT中的基础调整?

  • 变基是将分支移至新的基本提交的过程。

  • 就像重写分支的历史一样。

  • 在Rebasing中,我们将分支从一个提交移动到另一个提交。
    这样我们就可以保持线性项目历史记录。

  • 将提交推送到公共存储库后,使用Rebasing并不是一个好习惯。

39. GIT中的"重新设定基础的黄金法则"是什么?

  • 变基的黄金法则是,我们永远不要在公共分支上使用git rebase。
    如果其他人使用相同的分支,则在重新设置GIT后,他们可能会因查看Master分支中的更改而感到困惑。

  • 因此,不建议在其他协作者也使用的公共分支上进行重新部署。

40.为什么我们要使用"交互式重定基"代替"自动重定基"?

  • 通过使用交互式重定底,我们可以先更改提交,然后再将其移到新分支。

  • 这比自动变基更强大。
    它使我们可以完全控制分支的提交历史记录。

  • 通常,在将功能分支合并到master之前,我们使用Interactive Rebasing来清除提交的混乱历史记录。

41.在Git中重新部署的命令是什么?

用于重定基础的Git命令是:

git rebase

42. git clone和git remote之间的主要区别是什么?

  • git clone和git remote之间的主要区别在于,git clone用于创建新的本地存储库,而git remote用于现有的存储库。

  • git remote向现有的远程存储库添加了新的引用,以跟踪进一步的更改。

  • git clone通过从URL复制另一个存储库来创建一个新的本地存储库。

43.什么是GIT版本控制?

  • GIT版本控制可帮助我们管理软件团队随时间推移对源代码所做的更改。
    它可以跟踪特殊数据库中的所有更改。
    如果我们犯了一个错误,我们可以及时返回并查看以前的更改以更正该错误。

  • GIT版本控制可帮助团队协作开发软件并有效地工作。
    每个人都可以放心地合并所做的更改,以确保在GIT版本控制中可以对所有内容进行跟踪并保持完好无损。
    更改引起的任何错误都可以发现,并可以通过返回正常工作的版本来还原。

44.在GIT上使用什么GUI?

我们可以使用许多用于GIT的GUI。
其中一些是:

  • GitHub桌面

  • GITX开发

  • Gitbox的

  • 吉特可乐

  • 源树

  • Git扩展

  • SmartGit

  • GitUp

45. GIT中git diff命令的用途是什么?

  • 在GIT中,git diff命令用于显示2个版本之间,工作目录与索引之间,或者索引与最新提交之间的差异。

  • 它还可以显示两个Blob对象之间或者GIT中磁盘上的两个文件之间的更改。

  • 它有助于查找可用于功能或者错误修复的代码审查的更改。

46.什么是git rerere?

  • 在GIT中," rerere"是一个隐藏功能。
    rerere的完整形式是"reuserecordedresolution"。

  • 通过使用rerere,GIT可以记住我们如何解决了一次大冲突。
    下次GIT遇到相同的冲突时,它将为我们自动解决。

47. git diff命令的三个最受欢迎的版本是什么?

三种最受欢迎的git diff命令如下:

  • git diff:显示工作目录和索引之间的差异。

  • git diff –cached:显示索引和最近提交之间的差异。

  • git diff HEAD:显示工作目录和最新提交之间的区别

48. git status命令的用途是什么?

在GIT中," git status"命令主要显示工作树的状态。

它显示以下项目:

  • 索引文件和当前HEAD提交之间具有差异的路径。

  • 工作树和索引文件之间具有差异的路径

  • GIT未跟踪的工作树中的路径。

在以上三项中,第一项是我们使用git commit命令提交的项。
只有在运行git add命令后才能提交第二和第三项。

49. git diff和git status之间的主要区别是什么?

  • 在GIT中,git diff显示了不同提交之间或者工作目录与索引之间的差异。

  • 而git status命令仅显示工作树的当前状态。

50. GIT中git rm命令的用途是什么?

  • 在GIT中,git rm命令用于从工作树和索引中删除文件。

  • 我们使用git rm –r递归地删除领先目录中的所有文件。

51.应用隐藏的命令是什么?

有时我们想保存未完成的工作。
为此,我们使用git stash命令。
一旦我们想返回并从离开的最后一个地方继续工作,我们将使用git stash apply命令将未完成的工作重新带回。

因此,应用隐藏的命令是:

git stash apply

或者我们可以使用

git stash apply

52.为什么我们使用git log命令?

  • 我们使用git log命令在项目历史中搜索特定的提交。

  • 我们可以按作者,日期或者内容搜索git历史记录。
    它甚至可以列出在特定日期之前或者之后x天完成的提交。

53.为什么在GIT中需要git add命令?

  • GIT为我们提供了一个很好的功能,可以在提交前进行更改。
    为了进行更改,我们使用git add命令。
    这会将我们从工作目录的更改添加到索引。

  • 当我们处理多个任务时,我们只想提交完成的任务时,我们首先将完成的更改添加到暂存区,然后再提交。
    这时git add命令非常有用。

54.为什么要使用git reset命令?

  • 我们使用git reset命令将当前的HEAD重置为特定状态。

  • 默认情况下,它反转git add命令的动作。

  • 因此,我们使用git reset命令撤消git add命令的更改。

55.提交对象包含什么?

每当我们使用git commit命令在GIT中进行提交时,GIT都会创建一个新的提交对象。
该提交对象将保存到GIT存储库中。

提交对象包含以下信息:

  • HASH:Git树的SHA1哈希,它引用提交时索引的状态。

  • Commit Author:进行提交的人员/进程的名称以及日期/时间。

  • Comment:一些包含提交原因的文本消息。

56.我们如何将git日志消息转换为其他格式?

我们可以在git log命令中使用漂亮的选项。

git log – pretty

此选项将输出格式从默认格式转换为其他格式。

有一些预先构建的格式可供我们使用。

git log –pretty=oneline

例如:

git log --pretty=format:"%h - %an, %ar : %s"
ba72a6c - Dave Adams, 3 years ago : changed the version number

57.可以使用git hooks编写哪些编程语言?

  • Git钩子通常用shell和PERL脚本编写。
    但是,只要具有可执行文件,就可以用任何其他语言编写。

  • Git挂钩也可以用Python脚本编写。

58.什么是GIT中的提交消息?

  • 提交消息是我们添加到提交中的注释。
    我们可以通过使用提交消息来提供有关提交原因的有意义的信息。

  • 在大多数组织中,必须在每次提交时都放置一个提交消息。

  • 通常,提交消息包含项目的JIRA故障单,错误ID,缺陷ID等。

59. GIT如何保护存储库中的代码?

  • GIT包含组织的源代码,因此非常安全。
    GIT存储库中的所有对象都使用称为SHA1的哈希算法进行加密。

  • 该算法非常强大且快速。
    它可以保护源代码和存储库的其他内容免受可能的恶意攻击。

  • 该算法还通过保护更改历史记录以防止意外更改来维护GIT存储库的完整性。

60. GIT如何在版本控制中提供灵活性?

  • GIT是非常灵活的版本控制系统。
    它支持非线性开发工作流程。
    它支持与外部协议和现有系统兼容的流。

  • GIT还支持分支和标记,从而促进了版本控制中的多种工作流。

61.我们如何在GIT中更改提交消息?

  • 如果尚未将提交推送到GitHub,我们可以使用git commit --ammend命令来更改提交消息。

  • 当我们推送提交时,GitHub上会出现一条新消息。

62.为什么建议创建一个额外的提交而不是修改现有的提交?

  • Git修订在内部创建一个新的提交并替换旧的提交。
    如果提交已被推送到中央存储库,则不应将其用于修改先前的提交。

  • 它通常只应用于修改git注释。

63.什么是GIT中的裸仓库?

  • 用git init –bare命令创建的存储库是GIT中的裸存储库。

  • 裸存储库不包含源文件的任何有效副本或者已检出副本。
    裸存储库将git修订历史记录存储在存储库的根文件夹中,而不是存储在.git子文件夹中。

  • 它主要用于与其他开发人员共享和协作。

  • 我们可以创建一个裸仓库,所有开发人员都可以其中推送代码。

  • 裸存储库中没有工作树,因为没有人直接在裸存储库中编辑文件。

64.我们如何在GitHub服务器上放置本地存储库?

  • 要将本地存储库放置在GitHub上,我们首先将工作目录的所有文件添加到本地存储库中,然后提交更改。

  • 之后,我们调用git remote add命令在GitHub服务器上添加本地存储库。

  • 添加后,我们使用git push`命令将本地存储库的内容推送到远程GitHub服务器。

65.我们将如何在GIT中删除分支?

  • 我们使用git branch –d命令删除GIT中的一个分支。

  • 如果一个本地分支没有完全合并,但是我们想强行删除它,那么我们使用git branch –D命令。

66.在提交之前,我们如何设置Git存储库以运行代码健全性检查和UAT测试?

  • 我们可以将git hooks用于这种目的。
    我们可以在脚本中编写代码完整性检查。
    可以通过存储库的预提交钩子来调用此脚本。

  • 如果此挂钩通过,则仅提交将成功。

67.我们如何才能还原先前已推送并已公开的提交?

  • 为此,我们可以使用git revert命令。

  • 在内部," git revert"命令创建一个带有补丁的新提交,这些补丁可逆转先前提交中所做的更改。

  • 另一种选择是签出先前的提交版本,然后将其作为新提交提交。

68.在GIT中,如何将最后n个提交压缩为单个提交?

Tom压缩最后一个n提交一次提交,我们使用git rebase命令。
该命令压缩多个提交并创建一个新的提交。
它会覆盖提交的历史记录。
应该小心地做,因为它可能导致意想不到的结果。

69.我们将如何在GIT中从一个分支切换到一个新分支?

在GIT中,我们可以使用git checkout命令切换到新分支。

70.我们如何从GIT的工作目录中清除不需要的文件?

  • GIT提供了git clean命令来递归地清理工作树。
    它删除不在GIT中版本控制下的文件。

  • 如果我们使用git clean–x,那么忽略的文件也将被删除。

71. git tag命令的作用是什么?

  • 我们使用git tag命令在GIT中添加,删除,列出或者验证标签对象。

  • 用选项–a,-s,-u创建的标签对象也称为带注释的标签。

  • 带注释的标签通常用于发布。

72.什么是GIT中的"樱桃采摘"?

  • " git cherry-pick"是GIT中非常有用的功能。
    通过使用此命令,我们可以有选择地应用现有提交所做的更改。

  • 如果我们要选择性地释放功能,我们可以删除不需要的文件并仅应用选定的提交。

73.什么是GIT中的简短日志?

  • GIT中的简短日志是用于汇总git日志输出的命令。

  • git shortlog的输出采用适合发布公告的格式。

74.如何找到在特定提交中更改的文件的名称?

GIT中的每个提交都有一个哈希码。
该哈希码唯一表示GIT提交对象。
我们可以使用git diff-tree命令来列出在提交中被更改的文件的名称。

命令如下:

git diff-tree -r

通过使用-r标志,我们只获得单个文件的列表。

75.如果通过push命令提交新的提交,我们如何添加自动脚本以运行?

  • 在GIT中,我们可以使用钩子在特定事件上运行自动脚本。
    我们可以在预接收,更新或者后接收钩子之间进行选择,并将脚本添加到这些钩子中的任何一个上。

  • GIT将在发生任何此类钩子时自动运行脚本。

76. GIT中的预接收,更新和后接收钩子有什么区别?

  • 将提交推送到目标存储库时,将调用"预接收钩子"。
    在更新任何引用之前,将执行添加到此钩子的任何脚本。
    这主要用于执行开发最佳实践和策略。

  • "更新挂钩"类似于预接收挂钩。
    即将在完成任何更新之前触发它。
    对于每个推送到目标存储库的提交,都会调用一次此挂钩。

  • 更新完成并被目标存储库接受后,将调用"接收后挂钩"。
    这主要用于配置部署脚本。
    它也可以调用Continuous

  • 集成(CI)系统,并向存储库的相关方发送通知电子邮件。

77.我们是否必须将GIT挂钩的脚本存储在同一存储库中?

  • 挂钩对于GIT存储库而言是本地的。
    但是,可以在hooks目录中创建添加到钩子的脚本,也可以将其存储在单独的存储库中。
    但是我们必须将脚本链接到本地存储库中的钩子。

  • 这样,我们可以在单独的存储库中维护脚本的版本,但可以在存储钩子的存储库中使用它们。

  • 同样,当我们将脚本存储在单独的公共存储库中时,我们可以在多个存储库中出于不同目的重复使用相同的脚本。

78.我们如何确定导致GIT错误的提交?

  • 在GIT中,我们可以使用git bisect命令来查找已在系统中引入错误的提交。

  • " GIT bisect"命令在内部使用二进制搜索算法来查找引入错误的提交。

  • 我们首先告诉一个包含该错误的错误提交,以及一个在引入该错误之前就已经存在的良好提交。

  • 然后git bisect在这两个端点之间选择一个提交,并询问我们所选提交是好是坏。

  • 它会继续缩小范围,直到找到负责引入该错误的确切提交为止。

79.我们如何看待GIT中两次提交之间的差异?

我们可以使用git diff命令来查看两次提交之间的差异。
一个简单的git diff命令比较两个提交的语法是:

git diff <commit#1> <commit#2>

80.在GIT中识别提交的不同方式是什么?

  • GIT中的每个提交对象都有一个唯一的哈希。
    该哈希是40个字符的校验和哈希。
    它基于SHA1哈希算法。

  • 我们可以使用散列来唯一地标识GIT提交。

  • Git还支持为提交创建别名。
    此别名称为引用。
    GIT中的每个标签都是参考。
    这些引用也可以用于标识提交。
    GIT中的一些特殊标签是HEAD,FETCH_HEAD和MERGE_HEAD。

81.当我们运行git branch时,GIT如何知道上一次提交的SHA-1?

为此,GIT使用名为HEAD的引用。
GIT中的HEAD文件是对我们正在处理的当前分支的符号引用。
符号引用不是包含SHA-1值的普通引用。
一个符号引用包含一个指向另一个引用的指针。

当我们打开头文件时,我们看到:

$cat .git/HEAD
ref: refs/heads/master

如果我们运行git checkout branchA,那么Git会将文件更新为如下所示:

$cat .git/HEAD
ref: refs/heads/branchA

82.我们可以在GIT中创建哪些不同类型的标签?

在GIT中,我们可以创建两种类型的标签。

轻量标签:轻量标签是永远不会移动的参考。
我们可以通过运行类似于以下内容的命令来制作轻量级标签:

$git update-ref refs/tags/v1.0
dad0dab538c970e37ea1e769cbbde608743bc96d

带注释的标签:带注释的标签是GIT中更复杂的对象。
当我们创建带注释的标签时,GIT会创建一个标签对象,并写一个指向它的引用,而不是直接指向提交。
我们可以创建一个带注释的标签,如下所示:

$git tag -a v1.1 1d410eabc13591cb07496601ebc7c059dd55bfe9 -m 'test tag'

83.我们如何重命名远程存储库?

我们可以使用命令git remote named来更改远程存储库的名称。
这将更改与我们本地的远程存储库关联的简称。
命令如下所示:

git remote rename repoOldName repoNewName

84.有些人使用git checkout,有些人使用git co进行结账。

那怎么可能?

我们可以通过修改git配置在GIT中为命令创建别名。

如果调用git co而不是git checkout,我们可以运行以下命令:

git config --global alias.co checkout

因此,使用git co的人们在自己的环境中为git checkout取了别名。

85.我们如何查看GIT中每个分支的最后提交?

当我们运行git branch命令时,它将列出本地存储库中的所有分支。
要查看与每个分支相关的最新提交,我们使用选项–v。

确切的命令如下:

git branch –v

它列出的分支为:

issue75 83b576c fix issue
* master 7b96605 Merge branch 'issue75'
testing 972ac34 add dave to the developer list

86. origin是GIT中的一个特殊分支吗?

  • 不,起源不是GIT中的特殊分支。

  • 分支原点与分支主节点相似。
    它在GIT中没有任何特殊含义。

  • 当我们运行git init命令时,Master是启动分支的默认名称。

  • 当我们运行git clone命令时,Origin是远程服务器的默认名称。

  • 如果我们改为运行git clone -o myOrigin,则将myOrigin/master作为默认的远程分支。

87.我们如何配置GIT每次都不要求输入密码?

  • 当我们使用HTTPS URL进行推送时,GIT服务器会要求用户名和密码进行身份验证。
    它会提示我们在终端上输入此信息。

  • 如果不想每次都输入用户名/密码,则可以设置"凭据缓存"。

  • 它会在内存中保留几分钟。
    我们可以通过运行以下命令进行设置:

git config --global credential.helper cache

88. GIT用于数据传输的四个主要协议是什么?

GIT使用以下主要协议进行数据传输:

  • 当地的

  • HTTP

  • 安全shell(SSH)

  • 吉特

89.什么是GIT协议?

  • Git协议是一种用于在GIT中传输数据的机制。
    这是一个特殊的守护程序。
    它与GIT预先包装在一起。
    它侦听专用端口9418. 它提供类似于SSH协议的服务。

  • 但是Git协议不支持任何身份验证。

  • 因此,从好的方面来说,这是一个非常快速的网络传输协议。
    但是它缺少身份验证。

90.我们如何处理没有推送访问权限的项目?

对于没有推送访问权限的项目,我们可以分叉存储库。
通过运行git fork命令,GIT将在我们的命名空间中创建存储库的个人副本。
工作完成后,我们可以创建拉取请求,以将更改合并到实际项目中。

91.什么是git grep?

  • GIT与" grep"命令一起提供,该命令使我们可以在任何已提交的树或者工作目录中搜索字符串或者正则表达式。

  • 默认情况下,它适用于当前工作目录中的文件。

92.如何在GIT中重新提交订单?

我们可以使用git rebase命令来重新排序GIT中的提交。
它可以交互工作,我们也可以选择提交的顺序。

93.我们如何将一个提交拆分为多个提交?

要拆分提交,我们必须在交互模式下使用git rebase命令。
到达需要拆分的提交后,我们将重置该提交并接受已重置的更改。
现在,我们可以其中创建多个提交。

94. GIT中的过滤分支是什么?

  • 在GIT中,filter-branch是重写历史记录的另一种选择。
    它可以清除整个历史记录。
    当我们有大量的提交时,我们可以使用这个工具。

  • 它提供了许多选项,例如从历史记录中删除对特定文件的提交相关更改。

  • 我们甚至可以使用filter-branch在提交历史记录中设置姓名和电子邮件。

95. GIT维护的三棵主要树是什么?

GIT维护以下三棵树:

  • HEAD:这是最后的提交快照。

  • 索引:这是建议的下一个提交快照。

  • 工作目录:这是进行更改的沙箱。

96.工作GIT的三个主要步骤是什么?

GIT在简单的工作流程中具有以下三个主要步骤:

  • 将项目从HEAD检出到工作目录。

  • 将文件从工作目录暂存到索引。

  • 提交从索引到HEAD的更改。

97.我们和他们在GIT中的合并选项是什么?

  • 在GIT中,我们有两个简单的选项可以解决合并冲突:我们和他们的

  • 这些选项告诉GIT哪一方支持合并冲突。

  • 在我们的程序中,我们运行类似git merge -Xours branchA的命令

  • 顾名思义,在我们的分支中,合并冲突期间,分支中的更改优先于其他分支。

98.我们如何忽略由于空格引起的合并冲突?

GIT在git merge命令中提供了一个选项ignore-space-change来忽略与空白有关的冲突。

这样做的命令如下:

git merge -Xignore-space-change whitespace

99.什么是git blame?

在GIT中,git blame是找到更改特定行的人的很好的选择。
当我们在文件上调用git blame时,它将显示负责在该行中进行更改的人员的提交和姓名。

以下是一个示例:

$git blame -L 12,19 HelloWorld.java
^1822fe2 (Dave Adams 2015-03-15 10:31:28 -0700 12) public class HelloWorld {
^1822fe2 (Dave Adams 2015-03-15 10:31:28 -0700 13)
^1822fe2 (Dave Adams 2015-03-15 10:31:28 -0700 14) public static void main(String[] args) {
af6560e4 (Dave Adams 2015-03-17 21:52:20 -0700 16) //Prints "Hello, World" to the terminal window.
a9eaf55d (Dave Adams 2015-04-06 10:15:08 -0700 17) System.out.println("Hello, World");
af6560e4 (Dave Adams 2015-03-17 21:52:20 -0700 18) }
af6560e4 (Dave Adams 2015-03-17 21:52:20 -0700 19) }

100.什么是GIT中的子模块?

  • 在GIT中,我们可以使用git submodule命令在存储库中创建子模块。

  • 通过使用submodule命令,我们可以将Git存储库保留为另一个Git存储库的子目录。

  • 它允许我们将对子模块的提交与对主Git存储库的提交分开。