30个成功的电子商务网站设计,中企动力 网站报价,wordpress 邮件发布,南京网站优化建站Git基本操作#xff08;2#xff09; 上交文件之后#xff0c;git文件的变化git cat-file HEAD指针里面有啥文件被修改git statusgit diff 文件名 版本回退#xff08;git reset#xff09;撤销回退git reflog 撤销的三种情况还没有addgit checkout -- [file] 已经add还没… Git基本操作2 上交文件之后git文件的变化git cat-file HEAD指针里面有啥文件被修改git statusgit diff 文件名 版本回退git reset撤销回退git reflog 撤销的三种情况还没有addgit checkout -- [file] 已经add还没有commit已经add且commit 从本地仓库删除文件git rm 文件名 今天我们来继续了解Git的操作
上交文件之后git文件的变化
我们之前不是上交了几个文件嘛我们可以看看我们隐藏的.git文件发生什么变化没有 我们发现我们的对象库中记录了每次上交的commit编号而编号的前两位就是此次上交储存在对象库中的文件名。 objects 为Git的对象库里面包含了创建的各种版本库对象及内容。当执行git add 命令时暂存区的目录树被更新同时⼯作区修改或新增的文件内容被写⼊到对象库中的⼀个新的对象中就位于?“.git/objects”?目录下查找object时要将commit id 分成2部分其前2位是⽂件夹名称后38位是文件名称 git cat-file
找到这个⽂件之后⼀般不能直接看到里面是什么该类⽂件是经过? sha 安全哈希算法加密过的文件好在我们可以使用 git cat-file 命令来查看版本库对象的内容 其中还有一行tree b7a6dcbed4b5f267fde31ed7438195daaace7755我们也可以打印来看看 如果我们此时继续查看我们就可以查看My_file里面的内容 因为我的My_file里面没有任何内容所以没有打印任何内容。 通过这次操作我们可以大概理解git会记录我们的修改操作我们找到对应的修改操作之后就可以找到对应的文件。
HEAD指针里面有啥
除此之外我们可以看看HEAD指针里面有啥 我们来看看日志 这时候我们知道了HEAD指针里面储存了最近一次上交时的commit编号。
文件被修改
首先我们得知道git是追踪修改痕迹这里的修改痕迹指的是新增文件修改文件删除文件的版本控制器。我们之前把My_file文件已经上交了如果此时我们将My_file里写入文字 此时我们修改了工作区中的My_file文件。
git status
此时我们可以用git status来查看我们git仓库的状态 这里提示我们工作区中一个文件被修改了就是我们的My_file。而我们的暂存区没有改动。
git diff 文件名
我们可以用git diff 文件名来查看到底我们的文件有了哪些变化 我们看到带有加号的内容就是新增的内容。 我们还可以用git diff HEAD – [file] 命令来查看版本库和工作区文件的区别。
我们了解好了状态之后我们就可以把文件提交暂存区 这个时候我们再来看仓库的状态 这个时候显示的是修改需要被commited了我们此时commit一下 这时候显示的是没有什么需要被提交工作区是干净的。
版本回退git reset
git最重要的功能之一就是版本回退 之前我们也提到过Git能够管理⽂件的历史版本这也是版本控制器重要的能⼒。如果有⼀天你发现之前前的⼯作做的出现了很大的问题需要在某个特定的历史版本重新开始这个时候就需要版本回退的功能了。 执行git reset 命令⽤于回退版本可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进⾏回退⼯作区或暂存区是否回退由命令参数决定 git reset 命令语法格式为 git reset [–soft | --mixed | --hard] [HEAD] • –mixed 为默认选项使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容工作区文件保持不变。 • –soft 参数对于工作区和暂存区的内容都不变只是将版本库回退到某个指定版本。 • –hard 参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要⽤这个命令因为工作区会回滚你没有提交的代码就再也找不回了所以使用该参数前⼀定要慎重。 • HEAD 说明 ◦ 可直接写成commit id表示指定退回的版本 ◦ HEAD 表示当前版本 ◦ HEAD^ 上⼀个版本 ◦ HEAD^^ 上上⼀个版本 ◦ 以此类推… • 可以使用〜数字表示 ◦ HEAD~0 表示当前版本 ◦ HEAD~1上⼀个版本 ◦ HEAD^2 上上⼀个版本 为了演示我们做一些准备工作 现在我们想退回到第一次提交的版本我们现在可以用git reset来进行回退但是在这之前我们要弄清工作区 暂存区 版本库中的内容 我们现在工作区 暂存区 版本库的内容都是第二次提交的内容 我们的 –soft 参数对于工作区和暂存区的内容都不变只是将版本库回退到某个指定版本 我们的 –mixed 为默认选项使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容工作区文件件保持不变。 我们的 –hard 参数将暂存区与工作区都退回到指定版本。切记用作区有未提交的代码时不要用这个命令因为工作区会回滚你没有提交的代码就再也找不回了所以使用该参数前⼀定要慎重。 我们这里演示一下–soft选项 我们来查看仓库的状态 我们来看看版本库和工作区文件的区别 再来看看工作区和暂存区的区别 发现版本库的内容已经回退工作区和暂存区的内容没有回退。
除此之外我们还可以利用commit的id来回退我们打印日志 找到第一次上交的commit编号然后用类似的方法
撤销回退
拿上面举例我后悔撤销了该怎么办呢其实我们如果能拿到第二次提交时的commit的id就没问题。 但是这是因为凑巧我们打印了第二次提交时的commit的id要是万一没打印该怎么办
git reflog
也许还可以补救我们可以用git reflog命令可以查看我们本地的每一次命令 HEAD前面的部分commit的id也可以帮助我们进行回退 但是现实开发中因为一直再进行开发id号什么的早就忘的一干二净了所以还是小心点为上策~。
撤销的三种情况
还没有add
这个时候我们只是在工作区进行了修改还没有进行add。 假设我现在对我们的文件进行了修改 现在我想回到修改之前的版本我们有一条命令
git checkout – [file] git checkout – [file] 命令让工作区的 文件回到最近⼀次 add 或 commit 时的状态。要注意 git checkout – [file] 命令中的 – 很重要切记不要省略⼀旦省略该命令就变为其他意思了 已经add还没有commit
这个时候我们可以用–mixed选项 git reset HEAD 文件名因为–mixed是默认的所以不用再写。
已经add且commit
这个时候只能用–hard
git reset --hard 想回退的版本的commitid这个时候希望文件还没有交到远程仓库上要是交了事情就麻烦了。
从本地仓库删除文件
如果我们直接在工作区删除文件git会记录我们的修改的 我们只删除了工作区的并没有删除暂存区的要删除暂存区的我们要使用
git rm 文件名 删除之后记得commit我们的修改痕迹