潍坊市网站,大学 生免费商业网站设计,seo排名优化软件有用,网站建设英文如何表达Git - 记录一次由于少输入了一个参数导致的更改丢失
前言
某晚我激情开发了几个小时#xff0c;中途没有进行commit存档。准备睡觉时#xff0c;我想创建一个新的分支并将今晚所有更改提交到新分支上#xff08;似乎应该开发时候就创建#xff1f;#xff09;。
然后因…Git - 记录一次由于少输入了一个参数导致的更改丢失
前言
某晚我激情开发了几个小时中途没有进行commit存档。准备睡觉时我想创建一个新的分支并将今晚所有更改提交到新分支上似乎应该开发时候就创建。
然后因为少输入了一个参数导致被跟踪过的文件的更改全部消失了。
成因
我想创建并切换到api分支
git checkout -b api结果一困少输了个-b变成了
git checkout api结果我那晚开发的所有内容恰好都在api这个文件夹下于是所有的更改都没了。
分析
在执行git checkout命令时可以将整个仓库还原到一个分支/commit_hash/tag可以用于恢复一个文件(夹)。
当切换到分支/commit_hash/tag时正确的命令是git checkout 分支/commit_hash/tag。
例如我有一个分支名为dev那么我可以使用git checkout dev命令切换到dev分支例如我有一个commit的hash为9259d713a40e97f97af61a422631b723f5666aa5那么我可以使用git checkout 9259d713命令切换到这次commit例如我有一个tag名为v0.1那么我可以使用git checkout v0.1命令切换到这个tag例如我想创建并切换到dev分支那么我可以使用git checkout -b dev命令。
若重名则优先级分支 标签 commit_hash。
当恢复一个文件(夹)时正确的命令是git checkout -- 文件(夹)名。
例如我有一个文件夹是Solution那么我可以通过命令git checkout -- Solution将文件夹Solution恢复到暂存区或版本库。
但是如果我没有加--git checkout命令仍然会恢复这个文件夹
误操
我本来想创建并切换到一个分支api
git checkout -b api结果因为困倦忘记输入-b了
git checkout api结果此时我还没有api分支但正好有api文件夹。
git一看心想你这命令不规范想还原一个文件夹但是没有--啊你应该输成git chcekout -- api太菜了吧--都不知道输。还好我git比较聪明知道你的意思虽然你没有加--但我还是帮你把文件夹api给还原了吧。
然后我一个晚上的更改就几乎全被还原了。。。没被还原的只剩下一些未被跟踪过的文件新创建的文件。然后我就在VsCode的时间线里把文件一个一个恢复了一下。。。
竟然一丁点提示都没有。
亡羊补牢
早就有人吐槽创建并切换到新分支也是checkout命令因此从git 2.23开始引入了switch命令。
以后再切换分支时就使用git switch 分支名创建并切换到新分支时就使用git switch -c 分支名好了。
End
另我的git版本为2.42.0.windows.2。 The Real End, Thanks! 原创不易转载经作者同意后请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/144929924