【Git】Git的基本操作

张开发
2026/4/21 18:36:17 15 分钟阅读

分享文章

【Git】Git的基本操作
目录一、修改文件二、版本回退三、撤销修改情况一对应工作区的代码还没有add情况二已经add但没有commit情况三已经add并且也commit了四、删除文件​编辑一、修改文件Git ⽐其他版本控制系统设计得优秀因为 Git 跟踪并管理的是修改⽽⾮⽂件。什么是修改⽐如你新增了⼀⾏这就是⼀个修改删除了⼀⾏也是⼀个修改更改了某些字符也是⼀个修改删了⼀些⼜加了⼀些也是⼀个修改甚⾄创建⼀个新⽂件也算⼀个修改。让我们将 ReadMe ⽂件进⾏⼀次修改此时仓库中的 ReadMe 和我们⼯作区的 ReadMe 是不同的如何查看当前仓库的状态呢gitstatus命令⽤于查看在你上次提交之后是否有对⽂件进⾏再次修改。上⾯的结果告诉我们ReadMe 被修改过了但还没有完成添加与提交。⽬前我们只知道⽂件被修改了如果能知道具体哪些地⽅被修改了就更好了。有同学会说我刚改的我知道呀可是你还记得你三天前写了什么代码吗或者没写git diff [file]命令⽤来显⽰暂存区和⼯作区⽂件的差异显⽰的格式正是Unix通⽤的diff格式。也可以使⽤git diff HEAD -- [file]命令来查看版本库和⼯作区⽂件的区别。知道了对 ReadMe 做了什么修改后再把它提交到本地仓库就放⼼多了。ok啊我们来提交一下。git add之后就没有看到上⾯no changes added to commit (use git addand/or git commit -a) 的消息了。接下来让我们继续git commit即可二、版本回退之前我们也提到过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 上上⼀个版本◦以此类推...使用hard后我们可以看到就剩下一个readme文件了可以看到回到最初的版本了。其他的什么都没有了。当然我们还有后悔药可以吃。我们只要把上图中的第一个id加入到下图中的 hard后面就能回退到上一个版本。Git 还提供了⼀个git reflog命令能补救⼀下该命令⽤来记录本地的每⼀次命令。我们还可以使用git reflog查看历史操作。这样就能找到历史操作。1623516是什么这是他的部分id没错在版本回退的时候我们还可以使用部分id来代替目标版本。可往往是理想很丰满现实很⻣感。在实际开发中由于⻓时间的开发了导致commit id早就找不到了可是突然有一天我又想回到之前的版本那该如何操作呢貌似不可能了。。。值得说的是Git 的版本回退速度⾮常快因为 Git 在内部有个指向当前分⽀此处是master的HEAD 指针refs/heads/master⽂件⾥保存当前master分⽀的最新commit id。当我们在回退版本的时候Git 仅仅是给refs/heads/master中存储⼀个特定的version可以简单理解成如下⽰意图三、撤销修改情况一对应工作区的代码还没有add如果我们在我们的⼯作区写了很⻓时间代码越写越写不下去觉得⾃⼰写的实在是垃圾想恢复到上⼀个版本。⾟亏我们⼯作效率不⾼才写了三⾏代码要是你写了3天⼀直都没有提交该怎么删掉呢你⾃⼰都忘了⾃⼰新增过哪些有人说我可以 git diff xxx⼀下看看差别在删啊那你肯定⼜要花3天时间删代码了并且很⼤的概率还会改出bug。⼀周过去了你怎么向你的⽼板交代呢Git 其实还为我们提供了更好的⽅式我们可以使⽤git checkout -- [file]命令让⼯作区的⽂件回到最近⼀次add或commit时的状态。 要注意git checkout -- [file]命令中的--很重要切记不要省略⼀旦省略该命令就变为其他意思了后⾯我们再说。⽰例如下情况二已经add但没有commitadd 后还是保存到了暂存区呢怎么撤销呢让我们来回忆⼀下学过的git reset回退命令该命令如果使⽤--mixed参数可以将暂存区的内容退回为指定的版本内容但⼯作区⽂件保持不变。那我们就可以回退下暂存区的内容了 示例如下⽤git status查看⼀下发现现在暂存区是⼲净的⼯作区有修改。还记得如何丢弃⼯作区的修改吗恢复了情况三已经add并且也commit了不要担⼼我们可以git reset --hard HEAD^回退到上⼀个版本不过这是有条件的就是你还没有把⾃⼰的本地版本库推送到远程。还记得Git是分布式版本控制系统吗我们后⾯会讲到远程版本库⼀旦你推送到远程版本库你就真的惨了……四、删除文件在 Git 中删除也是⼀个修改操作我们实战⼀下, 如果要删除file5⽂件怎么搞呢如果你这样做了但这样直接删除是没有⽤的反⽽徒增烦恼 git status命令会⽴刻告诉你哪些⽂件被删除了此时⼯作区和版本库就不⼀致了要删⽂件⽬前除了要删⼯作区的⽂件还要清除版本库的⽂件。可以看到一共需要三步操作。而git给我们提供了删除操作只需要两步就行了。恢复操作我们之前也讲过了这里就不过多赘述了。

更多文章