重置为单个文件,但返回当前内容不变

Reset to a single file but back with the current contents unchanged

我错误地从当前工作文件中删除了很多以前的内容 foo. md,

然后需要回到昨天单个文件状态的头部复制那个内容然后切换到当前头部粘贴。

参考答案git - Hard reset of a single file - Stack Overflow

  git checkout HEAD -- my-file.txt

它会从 HEAD 跳转到它在索引中的状态,但副作用是删除今天的修改。

如何在文件不变的情况下重置为昨天的状态并回到当前的状态?

如果您想从 HEAD 检出一个文件,您似乎还没有提交它。 所以最简单的方法是使用 git stash:

git stash

现在更改保存在堆栈中,一切都像在 HEAD 中一样(我认为新创建的文件除外)

现在,如果您想返回到您更改的内容,请使用 stash pop:

git stash pop

这将从堆栈中弹出最后隐藏的更改,您今天所做的更改将返回到工作目录中。

在临时分支上提交文件

# create the temp branch
git checkout -b temp

# make sure the index is empty of changes
git reset

# Add and commit your file
git add my-file.txt
git commit -m "temp commit"

然后你就可以回到你的分支并在两种状态之间自由切换:

git checkout your-branch

# then to switch between states
git checkout temp -- my-file.txt
git checkout HEAD -- my-file.txt

有时犯这种错误只是为了对两个版本进行并排比较是查找和恢复删除的行的最简单方法。

还有另一个有用的 git 命令:git difftool。它将启动您最喜欢的 difftool(类似于 meldbeyond compare),您将能够比较当前 foo.md 和以前版本的内容。

git difftool HEAD~ foo.md

还有

git difftool --dir-diff HEAD~

在同时比较所有文件时很有用。