git 进阶:你要小心一些大厂面试官问你这些

56 阅读2分钟

之前偶尔遇到一些大厂面试官(网易)喜欢问git一些东西,所以说git命令行还是得掌握,虽然说不是每个大厂面试官都问,但是你防不住他问你这些非常冷门的东西。

像commit push这种我就不说了,说点进阶的,fetch、rebase、cherry-pick这种。像rebase、cherry-pick是我们公司资深开发告诉我的,但是你长期这样就是很巨婴,你不能老是别人喂饭给你吃对吧,所以像这种东西还是得去系统学习一下。

cherry pick

背景:本来应该在branch1 comomit 结果你在branch2直接commit,那想要把这些东西搬到branch1就会很麻烦,所以直接把1或者多个commit内容放到branch1上,于是

git checkout branch1
git cherry-pick <commit id>

语法

git cherry-pick <commit id>
git cherry-pick <commit id1> <commit id2>
git cherry-pick <commit id1>...<commit id8>
#2-8的commit全部复制过来(开区间)
git cherry-pick <commit id1>^...<commit id8>
#1-8的commit全部复制过来(闭区间)

这样这一个或者多个commit就会被复制到branch1上

解决cherry-pick造成的冲突

git add git cherry-pick --continue#1 继续
git cherry-pick --abort#2 回滚 
git cherry-pick --quit#3 中断(不咋用)

stash

当你在本地有文件变动,又想直接pull,是不会成功的,如果说你本身不希望这些变动直接commit,那么可以先保存起来。用stash,这个是一个栈,先把变动代码保存在栈里面,等pull之后再取出来,继续修改。

使用

  • 存栈
git stash
git stash name(注释)
  • 出栈
git stash pop(出栈顶)
git stash apply(不出栈 peek)
  • 清除
git stash drop 索引
git stash clear
  • 查看
git stash list
git stash show 索引

rebase

相比git merge,rebase会很干净,比如说原来merge,出现冲突,解决merge完之后 修改人的名字变成你的,这样就很难去追踪到底是谁的代码。merge之后这条分支记录还在,但是rebase完就相当于没有这个分支了。 develop #开发分支 master #主分支,并且有新代码

git checkout develop
git rebase master
git rebase --continue#出现冲突

diff

查看区别

截屏2023-09-09 上午1.38.38.png

git diff A...B

比较3和8的区别

git diff A..B

比较7 和 8的区别

log

查看日志 截屏2023-09-09 上午1.44.37.png

git log A..B

查看 4 6 8

git log A...B

查看 5 7 、4 6 8

fetch

  • git remote show origin查看本地是否落后于远程

语法

git fetch [远程] # 拉取全部

git fetch 远程 分支 # 拉取分支

pull

git pull=git fetch+git merge

git pull [远程] #拉取全部并合并

git pull 远程 分支 #拉取分支并合并

参考