2024年Git进阶(十一):Git 常用操作汇总_git restore --staged,2024年最新2024字节跳动前端面试

最后

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

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

五、从仓库中移除文件

当从磁盘删除已提交给仓库中的文件时,由于仓库缓存中还存在该文件,所以使用git rm [fileName]删除缓存中的文件,再提交后该文件就不再纳入版本管理。

若当前操作为误操作,可以通过回滚操作找回文件。

如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f配参。

若由于误操作将一些非必要文件提交至仓库,可以使用--cached,只删除仓库中的记录并不从磁盘上删除。

git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。例如:git rm log/\*.log

注意星号 * 之前的反斜杠 \, 因为 Git 有自己的文件模式扩展匹配方式,所以不用 shell 来帮忙展开。 此命令删除 log/ 目录下扩展名为 .log 的所有文件。

六、设置忽略文件

对于一些日志文件、临时文件以及一些软件生成的配置或输出文件并不需要进行文件管理,所以可以创建一个.gitignore文件将需要忽略的文件名称或表达式写入.gitignore文件,以实现忽略文件的目的。

文件 .gitignore 格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

git同样支持Glob模式,Glob模式为Shell中简化的正则表达式。

  • 星号(*)匹配零个或多个任意字符;
  • [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  • 问号(?)只匹配一个任意字符;
    如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
  • 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

.gitignore 文件生效步骤如下:

  • git status --ignored // 查看状态,验证是否已包括忽略的文件
  • git rm -r --cached . // 清除缓存,-r表示递归删除
  • git status --ignored // 查看具体效果
  • git add . // 重新trace file
  • git commit -m "update .gitignore" // 提交和注释

七、查看文件修改内容

使用git status只能查看每个文件的修改状态,但是无法看到每个文件的内容有哪些被修改,所以可以使用git diff查看所有追踪文件的修改对比。
在这里插入图片描述
需要注意的是,git diff是查看未暂存的文件中被修改的内容,当将该文件添加入暂存区后,就无法再通过git diff查看修改内容,需要使用git diff --cached

八、移动文件

当需要重命名文件时,可以使用git mv [oldFileName] [new FileName]Git对于重命名操作会分为三步进行,第一步首先重命名文件,然后再从仓库中删除原有的文件,最后将新文件添加进暂存区等待提交。

$ mv README.md LOOKME.md
$ git rm README.md
$ git add LOOKME.md

若通过软件进行批量修改文件时,也要按照该流程先删除原文件再添加新文件。

九、撤销操作

当由于一些操作失误提交或修改了文件内容时,可以通过Git回滚操作,回滚到修改之前的状态。

回忆下前面提到的文件状态,文件状态通常可以分为:

  • 不受版本控制的 untracked 状态;
  • 受版本控制并且已修改的 modified 状态;
  • 受版本控制已修改并提交到暂存区的 staged 状态;
  • 从暂存区已经提交到本地仓库的 committed 状态;
  • 提交到本地仓库未修改或者从远程仓库克隆下来的 unmodified 状态;
    在这里插入图片描述
9.1 撤销暂存区文件

使用git restore --staged [fileName]git reset HEAD [fileName]可以将暂存区文件恢复。

说明:git restore命令是 Git 2.23 版本之后新加的,用来分担 git checkout 命令的功能,通过用暂存区或者版本库中的文件覆盖本地文件的修改,以达到回退修改的目的,同时也可以使用版本库中的文件覆盖暂存区的文件,达到回退git add命令的目的。

!!注意,这个操作不会影响分支记录,就是相当于之前的 git checkout 命令重新检出一份文件来覆盖本地的修改。

git reset 其实就是用来设置分支的头部指向,当进行了一系列的提交之后,忽然发现最近的几次提交有问题,想从提交记录中删除,这是就会用到 git reset 命令,这个命令后面跟 commit id,表示当前分支回退到某个 commit id 对应的状态,之后的日志记录被删除,工作区中的文件状态根据参数的不同会恢复到不同的状态。

  • --soft: 被回退的那些版本的修改会被放在暂存区,可以再次提交。
  • --mixed: 默认选项,被回退的那些版本的修改会放在工作目录,可以先加到暂存区,然后再提交。
  • --hard: 被回退的那些版本的修改会直接舍弃,就像它们没有来过一样。

使用 git rest HEAD file_name 命令就可以将一个文件回退到 HEAD 指向版本所对应的状态,其实就是当前版本库中的状态,也就相当于还原了本地的修改。

对于工作区中未加到暂存区和版本库的文件,执行了 git add 操作之后可通过如下方法还原:

  • git rm --cached newfile
  • git restore --staged newfile
  • git reset HEAD newfile

注:使用后两个命令的时候不能是版本库的第一个文件。

9.2 撤销对文件的修改

使用git checkout -- [fileName]可以将该文件回滚到上一次提交的状态。

!注:记得git checkout -- <file>是一个危险的命令。 你对那个文件在本地的任何修改都会消失。Git 会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。

声明:由于没有添加到暂存区的文件无法被追踪,所以它的任何修改是没有办法回退!只能通过本地文件撤销操作进行。

十、查看操作历史

如果想要查看某个项目中所有提交信息,可以使用git log打印所有参与者的提交记录。

每条记录都会显示提交的SHA-1 校验,作者名字和作者邮箱以及提交时间并按提交时间倒序排列。
在这里插入图片描述
除了简单的git log外,还可以添加参数用于筛选和格式化输出信息:

  • -p --patch:它会显示每次提交所引入的差异。 也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交。
    在这里插入图片描述
  • --stat:在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。
    在这里插入图片描述
  • --pretty:这个选项有一些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 shortfullfuller 选项,它们展示信息的格式基本一致,但是详尽程度不一;
    在这里插入图片描述
    使用formart可以自定义打印的格式,常用格式信息如下:
    在这里插入图片描述
示例 10.1 将日志信息显示在一行上
$ git log --pretty=oneline

!](https://img-blog.csdnimg.cn/2021072010113599.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1bmh1YXFpYW5nMQ==,size_16,color_FFFFFF,t_70)

示例 10.2 以 short 格式输出仓库修改信息
$ git log --pretty=short

在这里插入图片描述

示例 10.3 以 full 格式输出仓库修改信息
$ git log --pretty=full

在这里插入图片描述

示例 10.4 以 fuller 格式输出仓库修改信息
$ git log --pretty=fuller

在这里插入图片描述
修改文件人员与提交文件人员可以不是同一个人,所以在查询日志时会区分修改人与提交人。

十一、Git 修改分支名称

使用git命令进行如下操作:

  1. 修改本地分支名称
git branch -m oldBranchName newBranchName

  1. 将本地分支的远程分支删除
git push origin :oldBranchName

  1. 将改名后的本地分支推送到远程,并将本地分支与之关联
git push --set-upstream origin newBranchName

十二、提交本地项目至远程仓库

在本地创建的文件夹项目,可以通过以下步骤将其提交到远程 Git 仓库中:

  1. 在远程 Git 仓库中创建一个新的空仓库。例如,可以在 GitHub 上创建一个新的仓库。
  2. 在本地项目根目录中使用以下命令初始化 Git 仓库:
   git init

  1. 使用以下命令将本地项目与远程 Git 仓库关联起来,其中 remote-url 是远程 Git 仓库的地址:
   git remote add origin remote-url

这里分享一份由字节前端面试官整理的「2021大厂前端面试手册」,内容囊括Html、CSS、Javascript、Vue、HTTP、浏览器面试题、数据结构与算法。全部整理在下方文档中,共计111道

HTML

  • HTML5有哪些新特性?

  • Doctype作⽤? 严格模式与混杂模式如何区分?它们有何意义?

  • 如何实现浏览器内多个标签页之间的通信?

  • ⾏内元素有哪些?块级元素有哪些? 空(void)元素有那些?⾏内元 素和块级元素有什么区别?

  • 简述⼀下src与href的区别?

  • cookies,sessionStorage,localStorage 的区别?

  • HTML5 的离线储存的使用和原理?

  • 怎样处理 移动端 1px 被 渲染成 2px 问题?

  • iframe 的优缺点?

  • Canvas 和 SVG 图形的区别是什么?

JavaScript

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

  • 问:0.1 + 0.2 === 0.3 嘛?为什么?

  • JS 数据类型

  • 写代码:实现函数能够深度克隆基本类型

  • 事件流

  • 事件是如何实现的?

  • new 一个函数发生了什么

  • 什么是作用域?

  • JS 隐式转换,显示转换

  • 了解 this 嘛,bind,call,apply 具体指什么

  • 手写 bind、apply、call

  • setTimeout(fn, 0)多久才执行,Event Loop

  • 手写题:Promise 原理

  • 说一下原型链和原型链的继承吧

  • 数组能够调用的函数有那些?

  • PWA使用过吗?serviceWorker的使用原理是啥?

  • ES6 之前使用 prototype 实现继承

  • 箭头函数和普通函数有啥区别?箭头函数能当构造函数吗?

  • 事件循环机制 (Event Loop)

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值