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.钩子是什么?有啥作用?
答:你可把钩子理解成事件触发,比如当你代码提交以后,需要通过邮件通知相关人员,就可以自己用脚本写一个通知;或者当某个分支删除时通知相关人员等。