【发布时间】:2025-12-06 10:20:03
【问题描述】:
我的同事前段时间添加了一些 .ps1 文件(此后提交了几次,他可能稍后只修改了其中一个文件等 - 所以我们不能假设这一切都是在一次提交中完成的)。假设它们是在 commit1 中添加的,后来在 commit5 中修改了其中一个文件。
然后,我不小心对那些 .ps1 文件提交了一些本地更改(特定于我的环境),以及我真正想要提交的其他更改。我只是暂存了所有更改并忘记排除我对 .ps1 文件的更改(我想保留在本地,但不提交)。我们可以称之为 commit14。
然后我再次提交(到其他文件,commit15)并推送我的更改。
基本上是这样的:
commit15 me Foo.cs, Bar.cs
commit14 me Foo.cs, Bazz.cs, [File1.ps1, File2.ps1, File3.ps1]
commit13 co-worker SomeCode.cs
...
commit5 co-worker File2.ps1
...
commit1 co-worker File1.ps1, File2.ps1, File3.ps1 (added)
我已经尝试通过丢弃 Bitkraken 中的任何本地更改然后 cd'ing 进入包含文件的目录并运行来恢复这三个 .ps1 文件(在上面的方括号中标记):
$ git checkout commit14~1 -f -- File1.ps1 File2.ps1 File3.ps1
没有输出,但文件随后被自动列为在 Bitkraken 中暂存。这让我充满了希望 - 但后来我意识到文件内容是相同的(包括我想要恢复的更改)。
我也试过这样:
$ git reset commit14~1 -- File1.ps1 File2.ps1 File3.ps1
输出如下:
Unstaged changes after reset:
M My/Path/File1.ps1
M My/path/File2.ps1
M My/Path/File3.ps1
结果还是一样,文件内容没有改变。 我什至尝试过明确指定“commit13”而不是“commit14~1”,但这也没有用。
我做错了什么?
所有这一切都发生在一个名为“dev”的分支上,以防万一。
而且我不确定 .ps1 文件的实际历史记录,但如果我不必找出每个文件的最后一次提交,我会非常喜欢。这很容易超过 3 个文件。肯定有办法说“将这些文件改回我不小心提交它们之前的状态,无论它们最后一次更新是什么时候”。
谢谢。
【问题讨论】:
-
我想你不知道你的 ps1 文件什么时候改变了。只需使用 diff 记录日志即可找出答案。
-
根据您对所提供答案的评论,我相信这就是您所需要的:*.com/questions/10755655/git-ignore-tracked-files
-
@matt 如果我不必这样做,我会非常喜欢。想象一下,如果它是 30 个文件,而不是 3 个!没有别的办法吗?
-
@joanis 我的问题是关于保留文件的先前版本,而不是忽略/排除它们。我只想恢复我自己对这些文件的更改。所以它不是重复的。
-
@TravelingFox 对我的误解深表歉意,我将撤回我的“重复”投票。幸运的是,没有人同意我的看法。
标签: git revert git-revert