当你执行
git push
时,你并不会覆盖文件,而是添加文件的一个版本。这个版本的图片是一个
commit
,它由一个
commit hash
来标识。
我强烈建议你阅读
https://git-scm.com/docs。它很简短,可以回答你很多问题。
所以,回答你的问题:
我怎么撤消这个操作?问题应该是:我怎么得到之前的文件?像往常一样,在
git
中,有很多方法可以实现某些事情。我不会在这里发布
git
教程,但我会尝试为您提供一些基本命令,让您能够完成所需的操作。然而,如果你没有完全理解它们,请务必阅读文档。
我将假设您的工作区是干净的,也就是说,所有的东西都已经提交并推送到了远程。本地和远程存储库是完全同步的。
当执行
git log
时,你可以看到你在你的分支上(父分支)所做的所有提交。一些有用的变种是:
git push -10 --oneline
。这显示最近的10个提交的简短版本(每个提交一行)。对于每个提交,你将看到提交散列(你的提交标识符)。要切换到该提交,你可以执行:
git checkout <commit_hash>
在此之后,您的文件版本将对应于该提交。但请注意,您不再位于分支上。如果您想留在自己的分支上,但重置文件到给定提交的版本,可以执行以下操作:
git reset --hard <commit-hash>
请注意,此操作会永久删除您未提交的更改,请谨慎使用。
"Original Answer"翻译成中文为:"最初的回答"
git reset --hard <commit_hash>
有时候,进行软重置是有用的:
有时候,进行软重置是有用的:
git reset --soft <commit_hash>
这将重置您上一次的提交到由<commit_hash>
标识的提交,但不会更改文件的版本。相反,这些更改在暂存区中。
还有一些有用的变体,例如:
最初的回答
git reset --soft HEAD~1
这个最后的命令会对你之前的提交进行软重置(重置到
HEAD
指向它之前的那个提交)。"最初的回答"。
git push --force <oldRef>:<Destinationbranch>
命令,但是这样做可能会试图掩盖事实而造成更多的损害... 我不再争论这个问题了,但请注意 ^^ - Romain Valeri<oldRef>
是之前在<destinationBranch>
分支顶端的提交的 SHA-1 哈希值。你可以通过检查远程仓库或本地仓库来更容易地找到它,但是如果不了解你的仓库,很难说。 - Romain Valeri