由于 git commit 代码校验报错造成的代码丢失的问题

前言

今天提交带码的时候造成代码丢失,找了一下午才找到,学到了一个新的知识点记录一下
我遇到问题的操作是:

  1. git status ,代码正常
  2. git add . 代码正常
  3. git commit -m"~~" 执行这个操作,出现了代码的校验,然后报了一些错误,之后我发现我的本地的代码就没了,
  4. 我多次尝试 git commit --no-verify -m"~~" 发现提交的是空的,我的代码找不到了
  5. 然后各种百度,发现了 git stash

git stash

  1. git stash 用于保存和恢复工作进度,保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。
  2. git stash list 显示进度列表,我们可以用 git stash 多次保存工作的进度,
  3. git stash pop [--index] [<stash>] 如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除,如果提供参数(来自git stash list显示的列表),则从该中恢复。恢复完毕 也将从进度列表中删除。选项–index除了恢复工作区的文件外,还尝试恢复暂存区。这也就是为什么在本章一 开始恢复进度的时候显示的状态和保存进度前的略有不同。
  4. git stash drop [<stash>] 删除一个存储的进度。默认删除最新的进度。
  5. git stash clear 删除所有存储的进度。
  6. git stash branch <branchname> <stash> 基于进度创建分支。

git stash 的应用场景

当我们在做着自己的工作时,要求解决一个bug并提交到主分支,但是我们的工作还没有完成,这时候

  1. 我们可以通过 git stash保存现在的工作状态,
  2. 然后新建一个新的临时分支修改我们的bug之后,通过git add 指定文件 进行提交我们修改的bug的文件,提交完成之后可以删除临时分支,
  3. 然后切换到我们的分支,通过 git stash list 查看刚才保存的工作进度。

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

  1. git stash apply 恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
  2. git stash pop,恢复的同时把stash内容也删了:

$ git stash pop
# On branch dev
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   hello.py
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)

再用git stash list查看,就看不到任何stash内容了:

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当您在使用 `git commit -s` 命令时,出现了报错信息 "found a swap file by the name",这通常是由于使用编辑器(如vim)打开了一个文件,但在编辑过程中发生了中断,导致编辑器生成了一个临时文件,即"swap file"。这个临时文件通常以`.swp`结尾,并且在同一目录下与原始文件同名。 这个报错的意思是git提交过程中发现了这个临时文件存在于您的工作目录中,它可能会干扰您的提交操作。为了解决这个问题,您可以根据以下步骤进行操作: 1. 首先,您可以尝试关闭编辑器,并删除这个临时文件。在终端中运行以下命令来删除该文件: ``` rm ~/Desktop/gm_static_x_erp/.git/.COMMIT_EDITMSG.swp ``` 请注意,您需要将上述命令中的文件路径替换为实际存在临时文件的路径。 2. 如果删除临时文件后问题仍然存在,您可以检查是否有其他编辑器或进程正在使用该文件。您可以使用以下命令来检查是否有其他进程正在使用该文件: ``` lsof ~/Desktop/gm_static_x_erp/.git/.COMMIT_EDITMSG.swp ``` 如果有输出结果,表示该文件仍然被占用。您可以通过终止相关进程或关闭相关编辑器来解决。 3. 如果上述步骤都没有解决问题,您可以尝试重新克隆整个git仓库,并重新进行编辑和提交。这将确保您的工作目录是干净的,并且不会存在任何临时文件。 总之,当使用 `git commit -s` 命令时遇到 "found a swap file by the name" 报错时,您应该先删除临时文件,并确保没有其他进程正在使用该文件。如果问题仍然存在,您可以尝试重新克隆仓库来解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Git 操作遇到 Found a swap file by the name “~/xxxx/.git/. COMMIT_EDI_TMSG.swp](https://blog.csdn.net/weixin_42164539/article/details/127578691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [commit-msg-linter:git commit消息linter钩子](https://download.csdn.net/download/weixin_42099530/18355332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vim打开文件提示:Found a swap file by the name](https://blog.csdn.net/qq_44851228/article/details/115188899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值