2024年最新【Git】详细介绍git每个命令与总结,46道面试题带你了解高级Web前端面试

最后

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

如果当前分支只有一个追踪分支,那么主机名都可以省略。

git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用 git push 。

git push -u origin master

上面的命令将本地 master 分支推送到 origin 主机,同时指定 origin 为默认主机,后面就可以不加任何参数使用 git push 了。

不带任何参数的 git push ,默认只推送当前分支,这叫做 simple 方式。此外,还有一种 matching 方式,会推送所有有对应的远程分支的本地分支。

git 2.0 版本之前,默认采用 matching 方式,现在改为默认采用 simple 方式,如果要修改这个设置,可以采用 git config 命令。

git config --global push.default matching

或者

git config --global push.default simple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用 -all 选项。

git push --all origin

上面命令表示,将所有本地分支都推送到 origin 主机。

如果远程主机的版本比本地版本更新,推送时 git 会报错,要求先在本地做 git pull 合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用 -force 选项。

git push --force origin

上面命令使用-force选项,结果导致在远程主机产生一个“非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用 -force 选项。

最后,git push 不会推送标签(tag),除非使用 -tags 选项。

git push origin --tags


log


git log 命令可以查看历史记录,git log 命令显示从最近到最远的提交日志;

如果嫌输出信息太多,看得眼花缭乱的,可以试试 git log --pretty=oneline 。我们可以看到当前版本以及之前的版本日志以及版本号。

git log --graph 命令可以看到分支合并图。

或者两个参数一起用:

git log --graph --pretty=oneline

git log --graph --pretty=oneline --abbrev-commit

首先,git 必须知道当前版本是哪个版本,在 git 中,用 HEAD 表示当前版本,上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ , 当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100

现在,我们要把当前版本回退到上一个版本,就可以使用 git reset 命令:

git reset --hard HEAD^

当你回退到了某个版本后,git log 只能显示此版本及之前的版本的日志,之后的版本日志就看不到了,但是,我们想恢复到之后教新的版本怎么办?

Git 提供了一个命令 git reflog 用来记录你的每一次命令。


tag


查看标签(用来标记标志性的稳定版本信息)

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

相比于 commit 的版本号(40位16进制),标签号则要好使的多。

所以,tag 就是一个让人容易记住的有意义的名字,它跟某个 commit 绑定在一起。

git tag [tag name]

如果没有标签名,则为查看所有标签,带标签名则为新建标签

git tag <tag name> 就可以打一个新标签

还可以创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字。

git tag -a <tag name> -m <comment> :添加带注释的标签

eg: git tag -a v1.2 -m 'version 1.2 released'

git tag -a <tag name> <md5> :对某个版本打标签

默认标签是打在最新提交的 commit 上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?

方法是找到历史提交的 commit id,然后打上就可以了。

git log --pretty=oneline --abbrev-commit

比方说要对 add merge 这次提交打标签,它对应的 commit id 是 6224937,那么我们就可以使用命令:

git tag v1.2 6224937

再用命令 git log 查看标签

可以用 git show <tagname> 查看标签信息

如果标签打错了,也可以删除:

git tag -d v1.2

如果要推送某个标签到远程,使用命令 git push origin <tagname>

eg: git push origin v1.2

如果标签已经推送到远程,要删除远程标签就要麻烦一点,先从本地删除:

git tag -d v1.2

然后,从远程删除;删除命令也是 push ,但是格式如下:

git push origin :ref/tags/v1.2

git tag -l '[expression]'

查看那符合正则表达式的


stash


git stash

备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到 Git 栈中。

git stash pop

从 Git 栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个 stash 的内容,所以用栈来管理,pop 会从最近的一个 stash 中读取内容并恢复。

git stash list

显示 Git 栈中内的所有备份,可以利用这个列表来决定从哪个地方恢复。

git stash clear : 清空 Git 栈。

使用 git 的时候,我们往往使用 branch 解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码,如果别人或者自己发现原有的分支上有个不得不修改的 bug,我们往往会把完成一半的代码 commit 提交到本地仓库,然后切换分支去修改 bug,改好之后再切换回来。这样的话往往 log 上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急 bug,那么使用 git stash 就可以将你当前未提交到本地的代码推入到 git 的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 bug,等到修完 bug,提交到服务器上后,再使用 git stash apply 将以前一般的工作应用回来。也许有的人会说,那我可不可以多次将未提交的代码压入到栈中?答案是可以的。当你多次使用 git stash 命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑, git stash list 命令可以将当前的 Git 栈信息打印出来,你只需要将找到对应的版本号,例如使用 git stash apply stash@{1} 就可以将你指定版本号为 stash@{1} 的工作取出来,当你将所有的栈都应用回来的时候,可以使用 git stash clear 来将栈清空。

在这里顺便提下 git format-patch -n , n是具体某个数字, 例如 ‘git format-patch -1’ 这时便会根据log生成一个对应的补丁,如果 ‘git format-patch -2’ 那么便会生成 2 个补丁,当然前提是你的 log 上有至少有两个记录。

看过上面的信息,就可以知道使用场合了:当前工作区内容已被修改,但是并未完成。这时 Boss 来了,说前面的分支上面有一个 bug,需要立即修复。可是我又不想提交目前的修改,因为修改没有完成。但是,不提交的话,又没有办法 checkout 到前面的分支。此时用 git stash 就相当于备份了工作区了。然后在 checkout 过去修改,就能够达到保存当前工作区,并及时恢复的作用。

注意这里由于只 stash 了一次所以要使用 pop,具体你存放了多少。


remote


查看远程仓库名

git remote -v

查看远程仓库url

git remote add <basename> <url>

新增远程仓库

git remote show <basename>

查看远程仓库详细信息

git remote rename <old basename> <new basename>

重命名远程仓库


commit


git commit -a -m 'xx'

暂存并提交

branch


git branch

查看本地仓库分支

git branch -r

查看远程分支情况

git branch -a

查看本地和远程的所有分支情况

git branch -v

查看本地仓库分支最后一次提交情况

git branch -vv

查看分支跟踪情况

git branch <branch name>

新建分支

git branch -d <branch name>

删除分支

git branch -D <branch name>

强制删除分支

git branch [--merged | --no-merged]

查看已合并|未合并的本地仓库分支

git branch -u <remote base>/<remote branch>

修改当前跟踪分支


checkout


git checkout -- [file] :恢复文件

git checkout -- demo.html 意思就是,把 demo.html 文件在工作区的修改全部撤销,这里有两种情况:

一种是 demo.html 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是 demo.html 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加暂存区后的状态。

总之,就是让这个文件回到最后一次 git commitgit add 时的状态。

但是如果 git add 到暂存区了,在 commit 之前,想撤销:

Git 同样告诉我们,用命令 git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区。

git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区,当我们用 HEAD 时,表示最新的版本。

再用 git status 查看一下,现在暂存区是干净的,工作区有修改:

还记得如果丢弃工作区的修改吗?

对的,使用:git checkout -- demo.html

git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以"一键还原"。

git checkout -b [branchname] [tagname]

在特定的版本上创建一个新的分支并切换到此分支

git checkout -b [local branch] [remote base]/[remote branch]

将远程分支检出到本地分支,并追踪

git checkout --track <remote base>/<remote branch>

让当前分支跟踪远程分支


rebase


git rebase [basebranch]

变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。


常见问题

==================================================================

git clone


git clone 支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等。

使用 https 除了速度慢意外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放 http 端口的公司内部就无法使用 ssh 协议而只能用 https。

git clone <版本库的网址> <本地目录名>

如果不写本地目录名,默认就是版本库的名字


如何新建分支


本地建立 branch 並立即切换到新分支

git checkout -b <branch_name>

下面的命令表示,在 origin/master 的基础上,创建一个分支。

git checkout -b newBranch origin/master

修改分支名称

git branch -m <new_name>


从远程仓库拉取代码到本地仓库,并建立跟踪关系


git checkout -b <本地新分支名> <对应的远程分支名>


如何在远程仓库新建一个分支


新建一个本地分支,按照正常流程提交完代码后,推送到远程

git push <remote base> <local branch>:<remote branch>


比较文件


git diff HEAD -- demo.html

命令可以查看工作区的 demo.html 和版本库里面最新版本的区别。


忽略某些文件


默认方法是在当前项目目录下创建一个 .gitignore 文件,如果需要忽略的文件已经添加到版本库中,请先移除

git rm --cached [file]

不删除文件,只移除追踪。

cat .gitignore

*.[oa]

*~

文件 .gitignore 的格式规范如下:

  • 所有空行或者以注释符号 # 开头的目录都会被 git 忽略

  • 可以使用标准的 glob 模式匹配

  • 匹配模式最后跟反斜杠(/)说明要忽略的目录

  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反


bug 分支


git 提供了一个 stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

git stash

修改完 bug 后,回到当前分支上继续干活,工作区是干净的,刚才的工作现场存到哪里去了?

git stash list :查看 stash 列表(stash 是一个栈的结构)

git 把 stash 内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用 git stash apply 恢复,但是恢复后,stash 内容并不删除,你需要用 git stash drop 来删除;

另一种方式是用 git stash pop ,恢复的同时把 stash 内容也删了;

你可以多次 stash ,恢复的时候,先用 git stash list 查看,然后恢复指定的 stash,用命令:

git stash apply stash@{0}


配置文件


配置 Git 的时候,加上 --global 是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

配置文件放哪了?

每个仓库的 Git 配置文件都放在 .git/config 文件中,在这份配置文件中,别名就在 [alias] 后面,要删除别名,直接把对应的行删掉即可。


查看配置


git config -l


设置git push 默认


git config --global push.default current


设置别名


git config --global alias.<name> <commend>

我的设置:

git config --global alias.st status

git config --global alias.cm "commit -m"

git config --global alias.ph "push origin <local_repository>:<remote_repository>"


保存用户名和密码


对于http(s)协议,可以用下面命令临时缓存

git config --global credential.helper cache

开启linux缓存

git config --global credential.helper wincred

开启windows缓存


最后

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

给大家分享一些关于HTML的面试题。


tatus`

git config --global alias.cm "commit -m"

git config --global alias.ph "push origin <local_repository>:<remote_repository>"


保存用户名和密码


对于http(s)协议,可以用下面命令临时缓存

git config --global credential.helper cache

开启linux缓存

git config --global credential.helper wincred

开启windows缓存


最后

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

给大家分享一些关于HTML的面试题。

[外链图片转存中…(img-uhDR36Cr-1715719288994)]
[外链图片转存中…(img-1M5jiwMJ-1715719288996)]

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值