重置为单个文件,但当前内容保持不变

时间:2019-06-04 12:58:28

标签: git git-checkout

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

然后需要返回到昨天单个文件状态的开头,然后复制该内容,然后切换到当前开头并将其粘贴。

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

  git checkout HEAD -- my-file.txt

它将与HEAD中的索引一起跳到索引中的状态,但副作用消除了今天的修改。

如何在文件未更改的情况下重设为昨天的状态并返回到当前状态?

3 个答案:

答案 0 :(得分:3)

在临时分支上提交文件

# 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

答案 1 :(得分:1)

如果要从HEAD检出文件,则似乎尚未提交该文件。 因此,最简单的方法是使用git stash:

git stash

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

现在,如果您想回到更改的位置,请使用隐藏弹出窗口:

git stash pop

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

答案 2 :(得分:0)

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

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

git difftool HEAD~ foo.md

git difftool --dir-diff HEAD~

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