整理常用git面试题

git中的常用命令

1. 常用命令

    01. `git clone PATH`:将远程服务器上面的项目克隆到本地

    02. `git init`:初始化目录

    03. `git status`:检查文件目录是否有更新的文件未添加到暂存区

    04. `git add 文件名`:将文件添加进暂存区

    05. `git rm --cached 文件名`:将暂存区的文件挪到工作区

    06. `git commit -m 描述信息`:将暂存区的文件添加到服务器

    07. `git log`:显示所有的提交操作

    08. `git log --oneline`:将信息一行显示,只显示前七个

    09. `git restore 文件名`:误删除以后只要文件在服务器就可以重新下载回来

    10. `git reset --hard 版本号`:将版本恢复到指定版本(可能会丢失提交信息)

    11. `git revert 版本号`:将版本还原到指定版本号之前

2.  分支操作

    01.  `git branch 分支名`:创建分支

    02.  `git branch -v`:查看所有分支

    03.  `git checkout 分支名`:切换分支

    04.  `git checkout -b 分支名`:创建并切换到创建出来的分支

    05.  `git branch -d 分支名`:删除分支

3. 合并和冲突

   01. `git merge 分支名`:将分支合并到当前分支

4. 远程服务器

   01. `git push 地址`:将代码推送到这个地址的远程服务器

   02. `git pull 地址`:拉取这个地址的代码

1.简述git第一次使用时需要配置的指令

git全局配置,初始化开发人员信息 git config --global user.name “开发人员名称” git config --global user.email “开发人员邮箱”

2. 简述git中如何将一个新增文件添加到本地仓库?

本质上就是将一个新的文件如何添加到本地仓库生成版本记录的过程 git add 文件名称 git commit 文件名称 -m “注释”

3. 简述git中如何完成本地仓库和远程仓库的关联?

git提供了remote命令语法完成远程仓库的操作,关联本地仓库和远程仓库 git remote add origin 远程仓库地址

4.为什么会出现版本冲突?如何解决冲突问题?

文件版本冲突,本质上就是多个开发人员同时提交了未及时更新的相同文件,导致版本库中出现了相同版本的不同文件出现了冲突问题

解决:需要开发人员手工解决冲突,在本地打开所有冲突的文件,进行代码的合理合并

5. git和svn有什么区别?

Git优点:

1、分布式,每个参与开发的人的电脑上都有一个完整的仓库,不担心硬盘出问题;

2、在不联网的情况下,照样可以提交到本地仓库,可以查看以往的所有log,等到有网的时候,push到远程即可;

3、非常强大的分支管理功能。

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

Git缺点:

权限管理不是很方便,需要安装插件gitolite,配置有点麻烦,或者直接使用gitlab管理。

SVN优点

1、较好的权限管理功能,可以精确控制每个目录的权限;

2、使用相对git要简单一点。

SVN缺点

1、集中式,如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整文件;

2、分支功能没有git强大;

3、速度没有git快,如果有五个分支,是把五个分支的文件全部拷下来;

4、必须联网才能commit。

6.你们平时在哪个分支上面开发

项目规模,一般在自己创建的分支上开发,每天最后由组长合并到dev分支

使用git 每天大概往远程服务器上提交几次?

        一般2-3次

7.什么是多分支模式?

多分支开发模式,是为了将开发中不同的功能模块进行拆分达到高效开发的目的,如master主分支主要用户发布软件、dev分支主要用于开发软件、feature分支主要用于新功能研发、hotfix分支主要用于bug修复等等

8.git中如何查看日志,如何进行历史的记录追溯命令

git log 命令用于显示提交日志信息。 git reflog 用于显示需要回退的步骤HEAD@{ * } git reset 命令用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。 git reset --hard [局部索引值]

9.回退到指定的版本

git reset --hard Head~0

表示回退到上一次代码提交时的状态 git reset --hard Head~1

表示回退到上上次代码提交时的状态 git reset --hard [版本号]

可以通过版本号精确的回退到某一次提交时的状态 git reflog

可以看到每一次切换版本的记录:可以看到所有提交的版本号

10.描述git diff作用、 git diff head作用

git diff比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。(默认是和暂存区文件进行比较)

git diff HEAD 命令显示工作区文件与和版本库文件的差别

11.说明git合并的两种方法以及区别

git代码合并有两种:git Merge 和 git ReBase

Git Merge:这种合并方式是将两个分支的历史合并到一起,现在的分支不会被更改,它会比对双方不同的文件缓存下来,生成一个commit,去push。

Git ReBase:这种合并方法通常被称为“衍合”。他是提交修改历史,比对双方的commit,然后找出不同的去缓存,然后去push,修改commit历史。

12.如何做代码的review?

创建review分支,然后再创建自己的个人分支,当你完成自己的业务逻辑的时候,

再合并到review分支.给组长做代码的review

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

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

解决冲突文件时,会先执行git stash,然后解决冲突; 遇到紧急开发任务但目前任务不能提交时,会先执行git stash,然后进行紧急任务的开发,然后通过git stash pop取出栈区的内容继续开发; 切换分支时,当前工作空间内容不能提交时,会先执行git stash再进行分支切换;

14. 之前项目中是使用的GitFlow工作流程吗?它有什么好处?

GitFlow可以用来管理分支。GitFlow工作流中常用的分支有下面几类:- master分支:最为稳定功能比较完整的随时可发布的代码,即代码开发完成,经过测试,没有明显的bug,才能合并到 master 中。请注意永远不要在 master 分支上直接开发和提交代码,以确保 master 上的代码一直可用;- develop分支;用作平时开发的主分支,并一直存在,永远是功能最新最全的分支,包含所有要发布 到下一个 release 的代码,主要用于合并其他分支,比如 feature 分支; 如果修改代码,新建 feature 分支修改完再合并到 develop 分支。所有的 feature、release 分支都是从 develop 分支上拉的。- feature分支;这个分支主要是用来开发新的功能,一旦开发完成,通过测试没问题(这个测试,测试新功能没问题),我们合并回develop 分支进入下一个 release - release分支;用于发布准备的专门分支。当开发进行到一定程度,或者说快到了既定的发布日,可以发布时,建立一个 release 分支并指定版本号(可以在 finish 的时候添加)。开发人员可以对 release 分支上的代码进行集中测试和修改bug。(这个测试,测试新功能与已有的功能是否有冲突,兼容性)全部完成经过测试没有问题后,将 release 分支上的代码合并到 master 分支和 develop 分支 - hotfix分支;用于修复线上代码的bug。**从 master 分支上拉。**完成 hotfix 后,打上 tag 我们合并回 master 和 develop 分支。GitFlow主要工作流程

1.初始化项目为gitflow , 默认创建master分支 , 然后从master拉取第一个develop分支2.从develop拉取feature分支进行编码开发(多个开发人员拉取多个feature同时进行并行开发 , 互不影响)3.feature分支完成后 , 合并到develop(不推送 , feature功能完成还未提测 , 推送后会影响其他功能分支的开发);合并feature到develop , 可以选择删除当前feature , 也可以不删除。但当前feature就不可更改了,必须从release分支继续编码修改4.从develop拉取release分支进行提测 , 提测过程中在release分支上修改BUG5.release分支上线后 , 合并release分支到develop/master并推送;合并之后,可选删除当前release分支,若不删除,则当前release不可修改。线上有问题也必须从master拉取hotfix分支进行修改;6.上线之后若发现线上BUG , 从master拉取hotfix进行BUG修改;7.hotfix通过测试上线后,合并hotfix分支到develop/master并推送;合并之后,可选删除当前hotfix ,若不删除,则当前hotfix不可修改,若补丁未修复,需要从master拉取新的hotfix继续修改;8.当进行一个feature时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上,即合并develop到当前feature分支;9.当进行一个release分支时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上,即合并develop到当前release分支 (!!! 因为当前release分支通过测试后会发布到线上 , 如果不合并最新的develop分支 , 就会发生丢代码的情况);

GitFlow的好处

为不同的分支分配一个明确的角色,并定义分支之间如何交互以及什么时间交互;可以帮助大型项目理清分支之间的关系,简化分支的复杂度。

15.使用过git cherry-pick,有什么作用?

命令git cherry-pick可以把branch A的commit复制到branch B上。

在branch B上进行命令操作:

复制单个提交:git cherry-pick commitId复制多个提交:git cherry-pick commitId1…commitId3注意:复制多个提交的命令不包含commitId1. 16.如何把本地仓库的内容推向一个空的远程仓库? git remote add origin `远程仓库地址`

如果是第一次推送,则进行下面命令:

git push -u origin master

注意:-u 是指定origin为默认主分支 之后的提交,只需要下面的命令:

git push origin master 17.git提交代码时候写错commit信息后,如何重新设置commit信息?

通过git commit --amend 来对本次commit进行修改。

18.git公钥配置

生成公钥

1.右击打开git bash

2.$ ssh-keygen -t rsa -C "个人邮箱地址",按3个回车,密码为空。

3.在C:Users{windows用户名}.ssh目录下得到了两个文件:id_rsa和id_rsa.pub

添加公钥

1.打开id_rsa.pub将其中内容复制

2.打开浏览器访问https://gitcode.net/-/profile,未登录则先登录再访问

3.点击右上角个人头像-点击设置菜单-点击左侧SSH密钥,在密钥输入框中粘贴复制的内容,点击添加密钥按钮完成公钥的添加。

4.完成git安装和公钥配置,可以开始git clone下载代码了。


比丘资源网 » 整理常用git面试题

发表回复

提供最优质的资源集合

立即查看 了解详情