即使我在提交之前 git 添加了所有文件,我可以恢复到只有一个文件的先前版本吗?

Posted

技术标签:

【中文标题】即使我在提交之前 git 添加了所有文件,我可以恢复到只有一个文件的先前版本吗?【英文标题】:Can I revert to a previous version of just one file even if I git added all files before a commit? 【发布时间】:2021-12-04 08:55:13 【问题描述】:

即使我在提交之前 git 添加了所有文件,我能否恢复到仅一个文件的先前版本?

所以,这就是我所做的: git add . 然后git commit -m "my changes" 然后git push

所以还有很多其他的 git add 。并在"my changes" 和当前头部之间提交。

即使我 git 添加了多个文件(git add .),是否可以仅将一个文件恢复到 "my changes" 状态?

【问题讨论】:

【参考方案1】:

您问题中的全部担忧是基于对 Git 是什么的完全误解。

每个 提交包含所有 个文件。它们都是整个项目的快照。 git add 只是告诉 Git 工作树中的哪些文件要特别注意下一次提交,但是你是否通过说 git add 明确地包含一个文件,或者在 特定 提交之前是否包含该文件,如果该文件是在 previous 提交中,它是在 every 之后的提交中。

所以你说的git add .与任何事情都完全无关。

问题变得很简单,您是否可以恢复文件的状态。答案是肯定的,当然;每个提交都包含所有文件,因此只需在您喜欢该特定文件状态的地方找到一个提交并提取它:

git restore --source=<thatCommitSHA> -- thatFile

现在git add 该文件(以及您喜欢的任何其他内容)并提交。

【讨论】:

文档在这里:git-scm.com/docs/git-restore 感谢您的解释。我不明白为什么有人反对我的问题。无论如何,我仍然很困惑。从这个answer 他们说git-restore is a tool to revert non-commited changes. Non-commited changes are: a) changes in your working copy, or b) content in your index (a.k.a. staging area). 我想我要问的是如果已经提交了更改,如何恢复到以前的版本。如果我要恢复到以前的提交,即使提交包含多个文件,我是否可以只恢复一个文件? 好吧,我真的不在乎其他答案怎么说。我的回答说明了 my 的回答,如果您不相信,请阅读文档。我已经回答了这个问题,我坚持我的回答。试着按照我说的去做。 我明白你在说什么。谢谢您的帮助。我链接该答案的原因是因为我很容易理解他们在说什么。老实说,我还是有点困惑。我发现文档有点神秘,这就是我在这里问的原因。 嗯,它们当然可以是神秘的。尽管如此,值得学习阅读它们。 git restore 的文档说:“使用还原源中的一些内容还原工作树中的指定路径...--source=&lt;tree&gt; 使用给定树中的内容还原工作树文件。通常指定源树通过命名一个提交。”所以这告诉你从提交中恢复文件正是这个命令可以做的事情。

以上是关于即使我在提交之前 git 添加了所有文件,我可以恢复到只有一个文件的先前版本吗?的主要内容,如果未能解决你的问题,请参考以下文章

git学习:理解git暂存区(stage)

在 Git 中丢弃本地提交

如何在提交之前撤消“git add”?

git merge PR 之前还原的提交(但不是所有还原的提交)

丢弃Git中的本地提交

Git 提交转储随机文件