我不小心运行了:
git push origin +master
在尝试将文件推送到我的Github存储库时,这个命令重置了所有提交历史并删除了一些文件。
我想知道是否有一种方法可以将我的存储库重置为具有哈希值94b90dc1121ce477131fa60ffdc234591554b6c8
的特定提交。
git checkout master
git reset --hard 94b90dc1121ce477131fa60ffdc234591554b6c8
git push -f origin master
以下是有关命令的说明...
首先,确保你在主分支上,所以使用checkout
命令使你的HEAD指向主分支。
HEAD
是什么?
实际上,它是Git维护的指针,指向你当前在Git树中的位置。
事实上,大多数概念,如HEAD和分支,只是指向树中不同点的指针。
在命令行中运行gitk
以以漂亮的图形格式查看树。
接下来,让我们将你的HEAD指针reset
到你在原问题中使用的确切提交。这将使你文件系统上的文件与该提交匹配。
要小心reset --hard
...如果你有未完成的工作或者还没有推送到服务器的提交,这可能会使它们“不可达”(再想想那个树)... 如果因为这个命令而“失去”了提交,通常可以通过使用reflog
找回它们。
最后,将你的主分支本地状态推送到GitHub的主分支。-f在这里是因为你正在重写分支的历史记录,所以你需要告诉Git“强制”它。
Jonathan的回答是正确的。实现同样功能的另一种方法是:
git push -f origin 94b90dc1121ce477131fa60ffdc234591554b6c8:master
git pull
不会尝试合并提交吗? - k0pernikus
+
修改符。我认为使用 refspec 推送会导致远程提交未引用,需要在应用之前加上-f
选项。 - Michael Burr