即使我在提交之前 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=<tree>
使用给定树中的内容还原工作树文件。通常指定源树通过命名一个提交。”所以这告诉你从提交中恢复文件正是这个命令可以做的事情。以上是关于即使我在提交之前 git 添加了所有文件,我可以恢复到只有一个文件的先前版本吗?的主要内容,如果未能解决你的问题,请参考以下文章