如何将本地文件恢复到git pull之前的状态
我试图拉远程回购到我的本地文件,但忘记了在操作之前隐藏我的本地文件。由于我的本地更改已经消失,并且我做了很多更改,我如何恢复此过程?这并不是一个真正的答案。不幸的是,没有答案。一般来说,Git不应该丢失您的文件,除非您明确告诉它。有很多方法可以告诉Git帮我丢失文件。如果看不到您运行的确切命令集,除了一般的建议之外,没有人能给您任何东西如何将本地文件恢复到git pull之前的状态,git,Git,我试图拉远程回购到我的本地文件,但忘记了在操作之前隐藏我的本地文件。由于我的本地更改已经消失,并且我做了很多更改,我如何恢复此过程?这并不是一个真正的答案。不幸的是,没有答案。一般来说,Git不应该丢失您的文件,除非您明确告诉它。有很多方法可以告诉Git帮我丢失文件。如果看不到您运行的确切命令集,除了一般的建议之外,没有人能给您任何东西 通常,将丢失未保存工作的拉取或合并应失败: $ git merge Updating 51ebf55b93..98cedd0233 error: Your l
通常,将丢失未保存工作的拉取或合并应失败:
$ git merge
Updating 51ebf55b93..98cedd0233
error: Your local changes to the following files would be overwritten by merge:
Makefile
Please commit your changes or stash them before you merge.
Aborting
使用git pull
在运行git 2.24.0的机器上生成相同的消息
一些早期的Git版本会给出不同的错误,而一些真正古老的Git版本确实会在您有未提交的工作时破坏您的工作树。您没有提到您拥有哪个版本的Git,但如果它至少是Git2.0,这应该不是问题
尽管如此,我还是建议避免使用git-pull。git pull所做的是运行两个git命令。第一个是简单的git fetch
。例如,运行git pull origin
运行git fetch origin
;运行git提取原始主机
运行git提取原始主机
;运行git pull
时没有选项,运行git fetch
时没有选项
第二个命令是危险的,或者说,危险这个词太强了:第二个命令会干扰你自己的工作。运行git-fetch
总是安全的。1学习如何读取git-fetch
打印的内容有点让人困惑,但这一切都有意义。详情见下文
运行git fetch
的第二个命令默认为git merge
。了解git merge的功能,以及它对当前工作树的影响。了解它的选项:--仅ff
,--无ff
,等等
您可以选择将git pull
rungit rebase
作为其第二个命令。了解git-rebase
的作用,以及它如何不仅影响当前工作树,而且影响过程中重新设置基础的提交。了解其选项,例如交互式重基的-i
。了解git-rebase
实际上就像一系列重复的git-cherry-pick
命令一样,2使用git的分离头模式。3
然后,在运行git fetch
并查看git fetch
所做的事情之后,决定是否要查看传入的提交,以及是否要合并--ff only
或--no ff
,或者是否要重新基础。如果您愿意,您现在有足够的空间和时间运行git log
,也有足够的空间和时间来决定是重新基线还是合并
一旦您非常熟悉所有这些元素,并且非常确定要从哪个存储库git fetch
中获取什么,那么就可以安全地提前选择merge vs rebase,并使用便利的git pull
快捷方式运行git fetch
,然后立即运行第二个命令
1如果您摆弄内部
git fetch
设置,可能会使其不安全。把它想象成重新连接你的电灯开关,使开关附近的墙上有一个带电的板。如果不破坏设置,git fetch
将是安全的。如果你这样做,那就由你来承担。如果您确实有未保存但已修改的本地文件,而您没有提交、转移或隐藏这些文件,那么很遗憾,您的工作可能会丢失。如果您使用的编辑器维护本地历史记录,那么您应该立即检查相关文件的本地历史记录。如果您有可能受到影响的本地更改,Git将不允许您提取。所以没有问题。如果拉取成功,所有内容仍然存在。哦,未保存的本地更改?我没想到。未保存的更改不是更改:(您的文件是否显示在git status
中?如果您打开了autostash选项,git可能已经自行隐藏了您的更改:检查git隐藏列表