Git 是一个分布式版本控制系统,用于跟踪计算机文件的更改,并协调多个用户间的协作工作。它最初由 Linus Torvalds 在 2005 年创建,旨在支持 Linux 内核的开发。Git 已经成为软件开发中最广泛使用的版本控制工具之一,不仅适用于代码,还适用于各种类型的文档和多媒体文件。 如果不是当年BitMover公司对linus的威胁 ,可能我们就没有机会用到这么免费和好用的Git了
接下来 来聊聊Git使用过程中遇到的一些事儿。
git暂存区和commit区
在提交git时,我们需要一步一步地来进行操作,你所做的修改,也是一步一步地从你的文件夹到git暂存区直到git仓库。
暂存区域是您提交和放置更改文件的地方。
commit区域是你即将要推送的到远程仓库的码头
了解了这两个概念,我们就会出现很多的问题了,请你记住:git永远原谅你向你妥协
如果你埋头写了很多东西,但是不知道自己写了什么?没事,git会提醒你
git diff
这个命令显示自最后一次提交以来,工作目录中文件的更改。它比较的是暂存区域(staging area)和工作目录中的文件。如果你还没有使用git add命令暂存任何更改,这将显示所有未暂存的更改。git diff <commit>
这个命令显示指定提交和当前工作目录之间的差异。这可以让你看到从那个特定的提交到当前工作目录的变化。git diff HEAD
这个命令显示最后一次提交和当前工作目录之间的差异。这相当于git diff,因为默认情况下git diff会比较 HEAD 提交和工作目录。git diff --cached或git diff --staged
这个命令显示暂存区域和最后一次提交之间的差异。也就是说,它显示的是你已经使用git add命令暂存的那些文件的更改。git diff --name-only
这个命令只列出有差异的文件名,而不显示具体的差异细节。这对于只想知道哪些文件有更改的场景很有用。git diff --stat
这个命令显示每个文件的统计信息,如添加和删除的行数,但不显示具体的更改内容。
如果你不小心使用 git add /git commit命令将文件或修改添加到了暂存区或commit区,但之后又不想将这些改动包含在即将进行的提交中
撤销add
git reset HEAD ./git reset HEAD + 文件名这可以将暂存区恢复到之前的状态,将文件从暂存区移出,但不会改变工作目录中的文件状态。git restore --staged +文件名/git restore --staged .这样也可以撤销你的git addgit checkout -- <file>这将取消暂存,并将工作目录中的文件恢复到上次提交的状态。如果你想保留工作目录中的改动,不要使用此方法。
撤销commit
git reset --soft HEAD^ HEAD^的意思是上一个版本,也可以写成HEAD ~ 1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
- --mixed
不删除工作空间改动代码,撤销commit,并且撤销git add .
这个为默认参数,git reset --mixed HEAD^和git reset HEAD^效果是一样的。 - --hard
删除工作空间改动代码,撤销commit,并且撤销git add .
如果你今天修改的太乱了,又很难找到你下手点,那么git 依旧允许你回退到你今天刚开始写的状态,再来一次,结局不同。
git reset --hard --HEAD^ 你可以只用这个回退到上一次提交的版本。
git log 如果你并不知道你需要回退到哪一次,因为可能你提交了多次,你可以使用这条指令来查看你的提交日志。其中HEAD的指向就是你当前的版本。
当然你可能会觉得麻烦所以推荐你使用 git log --pretty=oneline ,这将让log的输出一行一行展示,只显示关键信息。
你看见一串字符是不是有点纳闷?这哪是关键信息呢?
其实这是版本号的哈希值,它指向了你提交的历史记录版本,后面的是你提交时的修改描述。
通过git reset --hard -- + 哈希值 就可以回退到你的历史版本了。
那么我复合了发现我俩还是不适合咋办?
还是那句话,无论如何,git永远爱你,永远给你留退路。
还记得HEAD 给你指向的版本号嘛~对吧 那现在知道了吧?
但是如果你关闭了终端呢?这可怎么办?
你是真狠啊!不过没关系,git还是给你找了借口
git reflog 这可以帮助你找到你所有的更改记录,包括重置操作
--soft
git reset --soft <commit-hash>
这只会移动 HEAD 指针到指定的提交,但不会改变暂存区或工作目录的状态。
--mixed (默认)
git reset <commit-hash>或git reset --mixed <commit-hash>
这会移动 HEAD 指针,并且重置暂存区到指定的提交状态,但不会改变工作目录中的文件。这是 git reset 的默认行为。
git revert + 版本号
相比于git reset,git revert 命令用于撤销某个或某几个提交所带来的更改,但不会改变原有的提交历史。它通过创建一个新的提交来逆向应用指定提交的相反效果。换句话说,git revert 会生成一个新的提交,这个提交包含与被撤销提交相反的改动,从而在保留原有历史的同时,恢复到撤销前的状态。
好啦,个人之前遇到的事儿就基本就是这些啦,稍微总结一下,欢迎各位指正分享。