Git

Git Learning Notes (07)

Git Interview Questions

Posted by Chen Xingxu on September 3, 2020

07.Git学习笔记–Git面试题

1.怎么知道当前分支是从那一个分支上面拉取下来的?

答:每个本地分支都可以和远程分支建立关联,通过 git branch -avv 就可以查看。在 git clone 远程分支,或push 本地分支到远程的时候会自动建立关联。

也可以手动强行建立关联,通过如下命令:

git branch --track --set-upstream-to=origin/test test

origin/test 是你本地分支对应的远程分支;test 是你当前的本地分支。

2.创建分支都是从某个已存在的分支上面拉取的,请问如果现在有很多分支,那么 git branch xxx 创建的分支是属于哪一个分支?

答:git branch xxx 意思是基于当前激活分支创建一个新分支,通过 git checkout {分支} 切换当前分支。

3.假如我一次性改了多个文件,git show 显示的是哪一个修改的文件,还是把多个修改的文件都展示出来?

答:git show {分支} 会显示指定分支最后一次提交所变更的所有文件。

4.push 后 tree 这些对象会消失吗?

答:push 之后 tree 对象不会消失,而且还会拷贝到远程仓库。原则上来讲,Git 内部的对象都不应该被删除,否则就损坏了 Git 仓库快照。

5.切换分支的时候,没有分支名称怎么办?分支名称显示的是 commit-id,如果我想用这个分支,怎么办?

答:

git branch --contains <commmit_id>

分支名称显示 commit-id,是因为你切换到了一个只读分支。远程分支下载到本地之后就是只读的,如果要修改这个分支 ,就必须基于该分支创建一个新分支。另外在冲突状态下,不允许切换分支。

6.比如我 7-31 号建立分支 A,同事 8-1 建立分支 B,为什么此时我查看分支,看不到同事建立的分支 B,必须把代码干掉,或者重新新搞一个文件夹,才可以读取到这个分支?

答:通过 git fetch 可以把远程分支更新下来,git branch -avv 是可以查看到 B 分支的。但你要使用 B 分支,就必须基于远程分支新建一个本地 B 分支并与远程 B 分支建立关联,并切换过去。在 Eclipse 或 IntelliJ IDEA 其实就是 checkout 远程分支操作。

7.git-update 钩子与 Git 怎么协作完成文件下载的?

答:git-update 在推送的时候调用,用于打包 Git 对象文件并生成索引。HTTP 哑协议必须基于索引来 pull。

8.只有裸项目可以用作 Git 服务吗?非裸项目可以用作 Git 服务吗?

答:祼项目一般用作 Git 服务,非裸项目也可以用作 Git 远程服务。

工作目录中有正常编辑的文件,而 bare repository 只存放这些文件的 commit。

1.git init 创建本地仓库(在工程目录下创建);

2.git init –bare 创建远程仓库(在服务器或者工程目录以外路径都可以创建的备份仓库)。

工程 commit 到 1 中,push 到 2 中。

9.执行 pull 以后,本地的 .git 目录内容就和 Git 服务器上的 xxxxx.git 中的内容一样了吗?

答:不是百分百一样,只能说本地一部分 Git 对象同步过去了。

10.文件冲突了,也解决了冲突,提交后对应文件原来的提交历史记录没了,如何查看文件原来的提交记录?

答:解决冲突之后,原来的提交记录是不会删除的。只有以下两种情况会删除提交:

一、强行删除未合并的分支;

二、使用 reset 命令强行回滚两历史提交 git reset –hard

11.SSH 协议和 HTTP 哑协议怎么配合使用 ?

SSH 协议分配读写帐号,而 HTTP 哑协议分配只读帐号,这样来配合使用。

12.配置 Nginx 的作用是干嘛?

答:做 Web 代理,Git 本身不能实现 HTTP 通信,只能基于 Web 容器来实现。

13.钩子是什么?有啥作用?

答:你可把钩子理解成事件触发,比如当你代码提交以后,需要通过邮件通知相关人员,就可以自己用脚本写一个通知;或者当某个分支删除时通知相关人员等。