引言
最近在使用git 指令
时,遇到了一些问题,特写此文记录一下。内容覆盖的范围包括:撤销提交的修改、删除所有未跟踪文件、删除本地修改等
git checkout
git checkout
这个指令对于使用git 操作
的伙伴肯定都是十分熟悉的了,在这之前我对它的了解一直是只限于切换分支
有一天,我突然遇到了想要将已被git
跟踪并且修改的文件进行撤销操作的时候,我才发现,原来git checkout
还有这功能~
git checkout -- 文件名
:用于撤销对已跟踪文件的未提交修改
拓展
在Git 2.23
版本之后,git switch
和git restore
被用来代替某些git checkout
的用法
git switch
,更专注于分支切换的操作,不像git checkout
功能繁杂git restore
,用于撤销对文件的更改,将指定文件还原到最近一次提交的状态
提示
git checkout --
对于未跟踪的文件不会生效,因为它只能操作已经被Git
跟踪的文件
git restore
既可以用于撤销对已跟踪文件的未提交修改,也可以用于处理未跟踪文件
git clean
当你在工作区新增了一些文件,然后发现突然不需要了,这些文件是新增的,还并未被git
跟踪,可以使用git clean
指令来实现功能
# 删除文件
git clean -f
# 删除文件夹、文件
git clean -df
git reset
当执行git commit -m ""
指令提交了当前的文件修改,但突然发现这些修改不需要了,如果你使用IDEA
开发,那么可以直接图形化操作,但是现在需要通过指令来实现,直接通过git reset HEAD~
来回退到上一个版本,如果要回退多个版本使用git reset HEAD~n
git reset
用于将分支的指针移动到不同的提交。它可以在移动指针的同时修改暂存区和工作目录
提示:git commit
这个命令用于将暂存区的内容提交为一个新的版本或提交
git revert
git revert
用于创建一个新的提交,以撤销之前的提交。它不是移动指针,而是在历史中添加一个新的提交,该提交是前一个提交的逆操作
拓展
git stash
当在git pull
代码存在冲突时,可以先git stash
当前的修改,然后再git pull
,pull 完代码后git stash pop
将之前的修改恢复,这时再手动 merge 代码即可
趣事分享
当执行了git reset HEAD~
指令后突然意识到自己没有commit
(没有新增一个commit 版本
),只是add
了修改内容,然后你执行git status
指令后便会惊奇地发现多了很多修改,代码回退到了上一个版本(但不是你以为的上一个版......),遇到这种情况不要慌张,有时脑子一抽很正常,但是脑抽后要保持冷静,好好思考一下操作后发生了什么事情
显而易见,工作区的代码回退到了push
代码的版本,而你的目的就是保持上次已经push
代码后的版本状态,当前本地的修改都不需要保留,那么就可以直接删除这些被git
跟踪的已修改文件,重新pull
一下,然后本地代码就和远程代码又保持一致了
提示:对于遇到这种情况的git
操作,谨慎push
,先冷静思考
小结
git checkout -- <file>
用于撤销对已跟踪文件的未提交修改git switch
用于切换分支git restore
用于撤销修改
git clean -f
用于删除工作目录中未跟踪的文件git reset
用于回退到某个提交的操作,用于修改本地记录,不让该提交有历史保留git revert
用于撤销某个提交的操作,撤销已经 push 的提交,历史记录不会改变,还会新增一个提交的历史记录