【私人面试题】如果我在面试中问到git, 你又该如何应对?(二)

如果我在面试中问到git,你又该如何应对?

本文从实际工作经验出发,叙述了工作中常见的、和git提交代码相关的场景问题,并从此场景中抽象出面试中可能问到的问题,并记录了这些问题的解决办法。

实际场景1

同事小徐说有一个BUG只涉及bug_file.ts这个文件,但是他改了半天也无能为力,想让你去他电脑旁帮助修改。你看了这个BUG之后灵机一动,有了想法。同时告诉小徐他从一开始就跑偏了,完全不是这样改的。说罢,正当你要大显身手的时候,突然发现:

1. 小徐只是尝试性的修改了一下

你突然发现,小徐自己修改的内容都保存在工作区,没有进入暂存区,也就是没有使用git add bug_file.ts,这个时候你应该怎样做,才能开始你的表演?

推荐的做法

使用restore命令将小徐修改的内容全部丢弃

git restore bug_file.ts

2. 小徐很自信的被打脸了

你突然发现,小徐自己修改的内容有些保存在工作区,有些进了入暂存区,这个时候你应该怎样做,才能开始你的表演?

推荐的做法

同样是使用restore命令将小徐修改的内容全部丢弃,只不过麻烦一丢丢

css 复制代码
git restore --stage bug_file.ts
git restore bug_file.ts

第一句git命令的作用是将暂存区的修改回退到工作区,第二句的作用是将工作区的修改丢弃(同1)。

3. 小徐自信过了头

你突然发现,小徐都已经将自己修改的内容提交到了本地仓库,这个时候你应该怎样做,才能开始你的表演?

推荐的做法

首先返回到提交之前的状态,然后再将他的修改丢弃

perl 复制代码
git reset HEAD~
git restore bug_file.ts

git reset HEAD~的作用有两个,一个是:将HED指针移动到上一次提交(也就是拉取新代码之后的最后一次提交);另一个是:将上次的修改内容放回到工作区。

所以执行第一句之后就又和第一种情况相同了!

4. 小徐即将要挨批

你突然发现,小徐不仅将自己修改的内容提交到了本地仓库,并且还推送到了远程仓库,甚至已经提交了合并pr给小组长,好在小组长开会去了还没有处理这个pr。这个时候你应该怎样做,才能开始你的表演?

首先查看小组长的会还有多久结束

推荐的做法1

如果会议只有5分钟就要结束了,那只能

  • 撤销pr
  • 删除刚才提交的分支:git push origin --delete fix/A

推荐的做法2

会议还有50分钟才结束,那就不着急,犯不上删除这个分支,按照如下方式处理即可:

perl 复制代码
git reset HEAD~
git restore bug_file.ts
# balabala一顿操作
# 在小徐吃惊的表情下将修改之后的代码强推上去
git add bug_file.ts
git commit --amend --no-edit
git push origin HEAD -f

前面的几句同3,后面的git push origin HEAD -f是将自己正确的修改强推到远程已经提交的pr中去,-f就是--force的意思。

5. 组长也犯了糊涂

你突然发现,小徐已经提交了合并pr给小组长,小组长看都没看就合并了这个pr。这个时候你应该怎样做,才能开始你的表演?

  • 首先,纠正小徐的错误
  • 然后,再开始自己的debug
css 复制代码
git checkout main
git pull
git checkout -b revert/fix-A
git revert abc123
git commit -m "fix: revert fix/A"
git push origin HEAD

其中,main是开发主分支,revert/fix-A是用来纠正小徐错误提交的分支,abc123是小徐提交fix/A的哈希值。

做完之后,赶紧喊小组长将revert/fix-A分支merge掉,然后就当作小徐什么也没做一样,重新修改此bug。

实际场景2

经过去年的艰苦奋斗,你们做的产品已经成功的升级到了2代,与此同时开发主分支也被技术经理改成了standalone2023,这个时候你需要在本机修改默认分支为standalone2023,如何做到?

推荐的做法

先切换到这个分支,然后使用branch -m 设置默认分支

git checkout standalone2023
git branch -m standalone2023

实际场景3

你所在的前端组成员中有人使用了一些vscode的插件,而这些插件会在运行期间产生一些配置文件,比如自动产生了.vscode文件,在某一次提交的时候由于粗心,将自动生成的.vscode中的内容也提交到了远程仓库中,这个时候该如何处理?如果要你负责这个项目,该如何从一开始就避免这种行为?

推荐的做法

  1. 如果.vscode中的内容已经被推送到了远程仓库,则可以采用如下的做法:
sql 复制代码
git rm --cached .vscode
echo .vscode >> .gitignore
git add .gitignore
git commit -m "修改了gitignore"
git push origin HEAD

第一句的作用是告诉git目前不要跟踪这个文件了;第二句的作用是告诉git以后也不用跟踪这个文件了;

既然对.gitignore做了修改,就需要将修改同步到远程仓库中去,这就是后面代码的作用。

  1. 作为项目负责人,在创建项目仓库的时候就应该在.gitignore中将.vscode添加进去。

实际场景4

你是一个很酷的人,总是觉得使用git过程有个origin非常的不cool,你如何做才能不让你要执行的命令中不再出现origin?

推荐的做法

首先,origin是远程仓库在本地终端中的别名,如果不喜欢这个单词,可以使用如下的方法将其换成喜欢的单词:

lua 复制代码
git remote rename origin cool

这样原来使用origin的地方就全部变成了cool. 比如:

  • git pull cool/main
  • git push cool HEAD
  • git remote -v或者git remote -vv也会将原来显示的origin换成cool
相关推荐
心软小念1 小时前
外包干了27天,技术退步明显。。。。。
软件测试·面试
sin22013 小时前
idea集合git使用
git
木心5 小时前
Git基本操作快速入门(30min)
git·github
LXL_245 小时前
Git_撤销本地commit_查找仓库中大文件
git
小k_不小6 小时前
C++面试八股文:指针与引用的区别
c++·面试
yg_小小程序员6 小时前
鸿蒙开发(16)使用DevEco Studio上的Git工具进行多远程仓管理
git·华为·harmonyos
每天八杯水D11 小时前
Git完整使用经历
git
上海运维Q先生11 小时前
面试题整理13----deployment和statefulset区别
运维·面试·kubernetes
xianwu54313 小时前
反向代理模块。开发
linux·开发语言·网络·c++·git