重学Git:版本管理核心核心梳理:撤销修改、版本回退、删除文件

  • 原创
  • 作者:程序员三丰
  • 发布时间:2022-09-29 13:07
  • 浏览量:991
在我们日常代码开发中,Git 是一项必备的技能,但是很多同学都停留在简单且机械的使用命令或者UI工具层面,对于Git命令执行原理性的知识了解关注甚少,本文就这方面进行系统整理记录,以作记忆。

管理修改

  • 什么是管理修改?

    管理修改 这个概念虽然比较抽象,但对 Git 很重要,也是它比其他版本控制系统设计得优秀的原因。
    Git 管理的是修改,而不是文件。那什么是修改呢:

    • 在文件中新增了一行,是一个修改;
    • 在文件中删除了一行,是一个修改;
    • 更改文件中内容,是一个修改;
    • 甚至删了一些,又加了一些,同时修改了一些,也是一个修改;
    • 在工作区创建一个文件,也是一个修改;
    • 在工作区删除了一个文件,也是一个修改。
  • 查看修改

执行 git diff HEAD -- {filename} 命令可以查看工作区和版本库中最新版本的区别,也就是查看修改了什么。

版本

什么是版本

执行一次 git commit 就会生成一条提交记录,好比“保存了一个快照”,也就是一个我们说的版本。每次 commit 成功,都会生成一个版本。

查看版本

使用 git log 查看版本记录(也就是历史提交记录)

版本回退 reset

版本回退应该在 git commit 执行成功之后进行。

回退到上一个版本

git reset --hard HEAD^ 表示回退到上一个版本

Git必须知道当前版本是哪个版本,在Git中,
用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),
上一个版本就是HEAD^,
上上一个版本就是HEAD^^,
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

回退到指定版本

git reset --hard {commit-id前五位}
可通过命令 git refloggit log --oneline 查询提交记录,第一列就是commit id。

撤销修改

工作区产生了修改,要撤销修改,分两种情况来说:

  • 修改后,还没有执行git add,可执行下面的命令撤销修改:

git checkout -- {filename}
git restore {filename} # 新增

  • 修改后,已经执行了git add将修改放到了暂存区,如果还没有commit ,此时撤销修改需要两个步骤:
    • 先执行 git restore --staged {filename} 将修改从缓存区撤回到工作区(缓存区中修改将被丢弃);
    • 然后再执行 git restore {filename} 将工作区中的修改丢弃,就完成了撤销修改。

如果已经执行了 commit ,请使用版本回退进行处理。

删除文件

通常是在文件管理器中删除文件,或者通过 rm 命令删除。
上面讲过,删除文件也是一种修改,此时可以有两种选择:

  • 删错了,或者由于其他原因,想要还原删除的文件。可以执行git restore {filename}进行还原。
  • 确实要删除,可以先执行git add {filename},然后执行git commit这样文件就从版本库中删除了。

删除是危险操作,一般我们需要注意以下两点:

  1. 从来没有被添加到版本库就被删除的文件,是无法恢复的;
  2. 如果一个文件已经被提交到版本库,则永远不用担心文件被删除,但只能恢复到最新版本,会丢失最近一次提交后修改的内容。
声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://mp.51blog.xyz/article/37.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas