当前位置: 首页 > news >正文

春招准备之Git篇

本系列内容直接以八股文,即问题的形式总结,面试所需内容

1、什么是Git?

Git 是一个开源的分布式版本控制系统(DVCS),可以跟踪文件的更改,允许恢复到任何特定的版本,由于其分布式架构,一个主要的优点就是不依赖中央服务器来存储项目文件的所有版本。

因此当服务器中断时,你需要的所有恢复数据都在队友的Git存储库中,中央云存储库开发人员可以向其提交更改,并与其他团队成员进行共享

2、Git和SVN的区别?

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等

Git 与SVN的区别点:

1、Git 是分布式的,SVN 不是(集中版本控制系统):这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里

3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

3、Git的工作流程?

1、克隆仓库

如果你要参与一个已有的项目,首先需要将远程仓库克隆到本地:

git clone https://github.com/username/repo.git
cd repo

2、创建新分支

为了避免直接在 main 或 master 分支上进行开发,通常会创建一个新的分支:

git checkout -b new-feature

3、工作目录

在工作目录中进行代码编辑、添加新文件或删除不需要的文件。

4、暂存文件

将修改过的文件添加到暂存区,以便进行下一步的提交操作:

git add filename
git add .   
        # 或者添加所有修改的文件

5、提交更改

将暂存区的更改提交到本地仓库,并添加提交信息:

git commit -m "Add new feature"

git commit -a "Add new feature"

-a:通过命令行上加-a,指示提交已修改的所有被跟踪文件的新内容

注:

在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "。

所以在 git bash 中 git commit -m '提交说明' 这样是可以的,在 Windows 命令行中就要使用双引号 git commit -m "提交说明"。

6、拉取最新更改

在推送本地更改之前,最好从远程仓库拉取最新的更改,以避免冲突:

git pull origin main
git pull origin new-feature     
      # 或者如果在新的分支上工作

7、推送更改

将本地的提交推送到远程仓库:

git push origin new-feature

8、创建 Pull Request(PR)

在 GitHub 或其他托管平台上创建 Pull Request,邀请团队成员进行代码审查。PR 合并后,你的更改就会合并到主分支。

9、合并更改

在 PR 审核通过并合并后,可以将远程仓库的主分支合并到本地分支:

git checkout main
git pull origin main
git merge new-feature

10、删除分支

如果不再需要新功能分支,可以将其删除:git branch -d new-feature

从远程仓库删除分支:git push origin --delete new-feature

4、Git如何创建仓库?

分两种情况:一是创建一个空白的仓库,另一个是使用已经存在的仓库

Git 使用 git init 命令来初始化一个 Git 仓库,执行完命令后,Git 仓库会生成一个 .git 目录,Git的命令很多要在Git的仓库中运行,所以 git init 是使用 Git 的第一个命令。

使用方法

1、进入你想要创建仓库的目录,或者先创建一个新的目录:

mkdir my-project

cd my-project

使用当前目录作为 Git 仓库,我们只需使它初始化,该命令执行完后会在当前目录生成一个 .git 目录

git init

2、使用我们指定目录作为Git仓库

git init newrepo 

初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

简单记忆:git init (git仓库地址)

5、Git如何克隆仓库?

我们使用 git clone 从现有 Git 仓库中拷贝项目

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

  • repo:Git 仓库。
  • directory:本地目录

6、Git怎么配置文件?

git 的设置使用 git config 命令

1、全局(整台机器所有仓库) ~/.gitconfig
git config --system user.name "Your Name"
git config --system user.email "you@example.com"

2 、当前用户(登录账号) ~/.gitconfig
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

3 、仅当前仓库  .git/config
git config user.name "Your Name"
git config user.email "you@example.com"

去掉global只对当前仓库有效

4、查看已生效的所有配置

git config --list

7、Git的工作区、暂存区和版本库?

基本概念:

工作区(Working Directory)

工作区是你在本地计算机上的项目目录,你在这里进行文件的创建、修改和删除操作。工作区包含了当前项目的所有文件和子目录。

特点:

  • 显示项目的当前状态。
  • 文件的修改在工作区中进行,但这些修改还没有被记录到版本控制中。

暂存区(Staging Area)

暂存区是一个临时存储区域,它包含了即将被提交到版本库中的文件快照,在提交之前,你可以选择性地将工作区中的修改添加到暂存区。

特点:

  • 暂存区保存了将被包括在下一个提交中的更改。
  • 你可以多次使用 git add 命令来将文件添加到暂存区,直到你准备好提交所有更改。

版本库(Repository)

版本库包含项目的所有版本历史记录。

每次提交都会在版本库中创建一个新的快照,这些快照是不可变的,确保了项目的完整历史记录。

特点:

  • 版本库分为本地版本库和远程版本库。这里主要指本地版本库。
  • 本地版本库存储在 .git 目录中,它包含了所有提交的对象和引用。

工作区、暂存区和版本库之间的关系?

1、工作区 -> 暂存区

使用 git add 命令将工作区中的修改添加到暂存区。

git add filename

2、暂存区 -> 版本库

使用 git commit 命令将暂存区中的修改提交到版本库。

git commit -m "Commit message"

3、版本库 -> 远程仓库

使用 git push 命令将本地版本库的提交推送到远程仓库。

git push origin branch-name

4、远程仓库 -> 本地版本库

使用 git pull 或 git fetch 命令从远程仓库获取更新。

git pull origin branch-name

#  或者

git fetch origin branch-name

git merge origin branch-name

8、如何还原已经 push 并公开的提交?

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

git revert <name of bad commmit>

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

git pull  载并自动合并远程更新到当前分支(相当于git fetchgit merge

git fetch 只下载远程更新,不合并到本地分支

  • 想先查看远程更新再决定是否合并 → 用git fetch

  • 信任远程更新,直接同步 → 用 git pull 

10、Git 分支管理?

Git 分支管理是 Git 强大功能之一,能够让多个开发人员并行工作,开发新功能、修复 bug 或进行实验,而不会影响主代码库

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线

分支管理命令:

1、创建分支

创建新分支并切换到该分支:

git checkout -b <branchname>

切换分支命令:

git checkout  <branchname>

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录

2、查看分支

查看本地的所有分支:

git branch

查看远程分支:

git branch -r

查看所有本地和远程分支:(远程分支会以 remotes/ 前缀列出)

git branch -a

3、合并分支

将其他分支合并到当前分支:

git merge  <branchname>

例如:

git checkout main 

git merge feature-xyz

4、删除分支

删除本地分支:

git branch -d <branchname>

强制删除未合并的分支:

git branch -D <branchname>

删除远程分支:

git push origin --delete  <branchname>

11、Git Stash?

临时保存工作进度:允许临时保存当前工作目录的更改,以便可以切换到其他分支或处理其他任务

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

保存当前工作进度

git stash 

查看存储的进度

git stash list

清空所有存储

git stash clear 

删除特定的存储项目?

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

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

一般什么情况下会使用git stash

命令git stash是把工作区修改的内容存储在栈区

以下几种情况会使用到它:

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

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

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

12、Git Rebase?

Git Rebase 是一个强大的工具,用于将一个分支的更改“移动”到另一个分支的最新提交之上,从而创建一个线性、干净的提交历史。它常用于整理提交记录、避免不必要的合并提交(merge commit),但也会重写提交历史,因此需要谨慎使用

Rebase 的意思是“变基”,即将当前分支的提交“摘下来”,然后重新应用到目标分支的最新提交之上

变基当前分支到指定分支

git rebase <branchname>

将当前分支变基到 main 分支:

git rebase main 

交互式变基:

git rebase -i <commit> 

交互式变基允许你在变基过程中编辑、删除或合并提交

git merge和git rebase之间的区别?

简单的说,git merge和git rebase都是合并分支的命令。

git merge branch会把branch分支的差异 内容pull到本地,然后与本地分支的内容一并形成一个committer对象提交到主分支上,合并后的分支与主分支一致;

git rebase branch会把branch分支优先合并到主分支,然后把本地分支的commit放到主分支后面,合并后的分支就好像从合并后主分支又拉了一个分支一样,本地分支本身 不会保留提交历史

13、Git Cherry-Pick?

git cherry-pick命令允许你选择特定的提交并将其应用到当前分支。它在需要从一个分支移植特定更改到另一个分支时非常有用。

拣选提交

git cherry-pick <commit>

例如,将 abc123 提交应用到当前分支:

git cherry-pick abc123

处理拣选冲突:如果拣选过程中出现冲突,解决冲突后使用git cherry-pick --continue 继续拣选

拣选feature分支上的特定提交到main分支:

git checkout main 

git cherry-pick abc123

14、提交对象包含什么?

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

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

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

(你在以前的工作中如何使用分支以及它的用途 是什么)

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

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

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

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

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

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

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

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

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

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

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

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

命令git log –number:表示查看当前分支前number个详细的提交历史记录;

命令git log –number –pretty=oneline:在上个命令的基础上进行简化,只显示sha-1码和提交 信息;

命令git reflog –number: 表示查看所有分支前number个简化的提交历史记录;

命令git reflog –number –pretty=oneline:显示简化的信息历史信息;

如果要查看某文件的提交历史记录,直接在上面命令后面加上文件名即可

注意:如果没有number则显示全部提交次数

19、什么是SubGit?

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

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

http://www.dtcms.com/a/470176.html

相关文章:

  • 11-py调用js
  • 分析竞争对手网站公司网站建设怎么
  • 2.Xshell效率实战:SSH管理秘籍的技术
  • 长春网站建设长春建设一个视频网站需要什么
  • 网站建设的设计方案平度市网站建设
  • Salesforce项目老掉坑?这8个思维陷阱千万别踩
  • 从递归到迭代的全方位解析——力扣38.外观数列(Count and Say)
  • 深度学习(DL)概念及实例操作
  • 基于单片机的四点位水位控制与报警系统设计
  • 如何将Python脚本输出(含错误)全量保存到日志文件?实战指南
  • 3d网页游戏排行做360手机网站优化
  • Unreal Engine 中的旋转表示:FQuat 与 FRotator 全面解析
  • 设计模式-解释器模式
  • 望牛墩镇仿做网站泰州建设网站
  • 网站建设与网页制作基础入门教程祥云平台官方网站
  • Unreal Engine C++ 开发核心:USceneComponent 常用方法详解
  • 陪诊陪护小程序前端功能解析:就医照料的便捷对接与全流程保障
  • 在线PhotoShop网页版常用快捷键和实用技巧
  • 湖南建设网站公司h5四合一网站建设
  • (一)黑马React(项目初始化/字体和样式/列表循环/高亮排序/自定义hooks/异步RTK)
  • 酒泉网站建设有限公司自己怎样做公司广告视频网站
  • 基于Python的旅游数据可视化系统的分析与设计-计算机毕设 97740
  • PHP MySQL 使用 ORDER BY 排序查询
  • QT中加载PSQL驱动
  • 杭电 神经网络与深度学习 学习笔记
  • 网站建设合优企业做国外网站多少钱
  • 网站建设 主要学是么服装详情页设计
  • 自适应编码调制简介
  • MySQL实战篇05:MySQL主从复制Docker实战(上)——1主2从集群搭建与问题解决
  • 金融网站建设方案ppt模板重庆建设厅官网