首页 > 解决方案 > 将git分支恢复到最后一次提交的安全方法?

问题描述

我已经签出了本地的一个分支,我提交了所做的更改,但我确实git pull origin master在我的一个名为 app.scss 的文件中存在冲突,我开始错误地解决此文件中的冲突 我删除了我接受的更改更改,那是错误的,我需要我的更改

这是git日志

PS C:\makumba> git log 
commit d4c3dd49cba1931fce44aa8a7078842d0c1cece0 (HEAD -> features/Email_footer)
Author: <authorname>
Date:   Tue Jun 1 13:30:28 2021 +0200

    video footer
........

问题 如何取回我的更改?我需要像下面这样恢复到最后一次提交吗?

git reset --hard HEAD

标签: gitgithubgit-branchgit-merge-conflict

解决方案


如果它们从未上演或提交,我认为您不会将更改取回。接受传入的更改会将这些更改应用到您的工作副本,这是最不稳定的地方,这意味着除非您的操作系统具有某种形式的恢复功能,或者您在开始之前制作了整个 repo 和工作副本的副本,否则您将退出运气,对不起。

为避免再次发生这种情况,我建议您掌握git reset,正如您正确地建议的那样,如果您还没有丢失工作副本更改,这将是答案(您也可以在拉入远程更改之前先提交到分支) :

  • git reset --soft [ref]会将 HEAD 指向的分支更改为任何[ref]内容。[ref]可能是HEAD~1,这意味着“HEAD 之前的修订”。请注意,这会更改分支,而不仅仅是 HEAD 指针。因此,如果 HEAD 指向 MAIN,那么它将移动的是 MAIN,并且您将有悬空提交(git reflog只要您不进行太多更改或在查找它们之前等待太久,您就可以再次使用它们)。
  • git reset --mixed [ref]将做与 相同的操作git reset --soft,但也会更新索引以匹配(即,您的工作副本将只保留您的更改)。
  • git reset --hard [ref]将与 相同git reset --mixed,但也会更新工作副本以匹配索引。这是危险的,因为您可能会丢失未暂存的、未提交的更改。

有关更多详细信息,请参阅https://git-scm.com/book/en/v2/Git-Tools-Reset-Demystified。对不起你的损失。


推荐阅读