我第一次承诺使用git存储库; 然后我后悔提交并想要还原它.我试试
# git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
Run Code Online (Sandbox Code Playgroud)
此提交是存储库的第一次提交.知道如何撤消git的初始提交吗?
CB *_*ley 491
您只需要删除您所在的分支.您无法使用,git branch -D因为这样做有安全检查.你可以update-ref用来做这件事.
git update-ref -d HEAD
Run Code Online (Sandbox Code Playgroud)
千万不能使用rm -rf .git或类似这样的,因为这将事情彻底消灭整个仓库在内的所有其他部门,以及您尝试重置分支.
fra*_*ras 55
您可以删除HEAD并将存储库还原到新状态,您可以在其中创建新的初始提交:
git update-ref -d HEAD
Run Code Online (Sandbox Code Playgroud)
创建新提交后,如果已经推送到远程,则需要强制它到远程以覆盖先前的初始提交:
git push --force origin
Run Code Online (Sandbox Code Playgroud)
Cur*_*one 21
要恢复初始提交,请使用以下命令。
git update-ref -d HEAD
Run Code Online (Sandbox Code Playgroud)
完成后,未提交的文件现在位于暂存区域中。您可以通过命令确认此暂存状态git status,您将获得类似于下面链接的屏幕截图中的结果。
Git 建议使用命令语法来取消暂存相关文件(请参见上图)。简而言之,使用以下命令:
git rm --cached . -r
Run Code Online (Sandbox Code Playgroud)
命令中的点( .) 表示当前位置/目录,而该标志则递归-r地取消暂存文件,而不提示对每个文件进行确认。
您现在可以快速执行操作git status以确认暂存区域现在为空。
如果您已经将文件推送到远程存储库,下一步是将这些更改推送到远程存储库以恢复两者(本地和远程)之间的奇偶校验。
但是,在推送之前,请创建一个.gitignore文件并用不需要的文件填充它。请在此处阅读如何创建.gitignore文件。
此时,下一个最佳的逻辑解决方案是使用 或 将更改推送到远程git push(git push -f但是,请始终记住强制推送是危险的 - 请阅读此处。)。
然而,这两个推送命令都可能返回错误,这可能需要拉取并解决合并冲突。因此,为了避免这种麻烦,您可能只需删除整个远程存储库(在 GitHub 上使用这些说明),然后使用相同的名称重新创建它。
此外:
rm -rf .git使用,删除本地 git 存储库git init,git add -A,git commit -m "<commit message>",git remote add origin <repo url>,git push -u origin main。附:
恢复第一次提交的原因有很多。但是,我认为同样影响我的最常见原因之一是忘记添加一个.gitignore从提交中排除不必要文件的文件。就我而言,这个错误意味着我无意中将node_modules目录推送到远程存储库。
经过进一步研究,我发现了一篇技术文章,解释了一种更简单的忽略先前提交的文件的方法,该方法无需经历取消提交和删除远程存储库的繁琐过程。
non*_*kle 12
此问题与此博客文章相关联,并为更新版本的Git提出了替代解决方案:
git branch -m master old_master
git checkout --orphan master
git branch -D old_master
Run Code Online (Sandbox Code Playgroud)
该解决方案假定:
master分支上只有一个提交old_master所以我可以自由使用该名称它会将现有分支重命名为old_master并创建一个新的孤立分支master (就像它是为新存储库创建的),之后您可以自由删除old_master...或不.由你决定.
注意:移动或复制git分支会在删除时保留其reflog(请参阅此代码),然后创建新分支会将其销毁.由于您想要恢复到没有历史记录的原始状态,您可能希望删除分支,但其他人可能想要考虑这个小记.
Jon*_*ler 10
在问题规定的条件下:
git init,git add操作,git commit,如果满足这些先决条件,那么撤消初始提交的最简单方法是:
rm -fr .git
Run Code Online (Sandbox Code Playgroud)
从您所在的目录git init.然后,您可以重做git init以重新创建Git存储库,并使用您后悔没有第一次进行的任何合理的更改重做添加,并重做初始提交.
危险!这将删除Git存储库目录.
它会永久地删除Git存储库目录,并且无法恢复,除非你在某个地方有备份.在前提条件下,您没有想要保留在存储库中的任何内容,因此您不会丢失任何内容.您添加的所有文件仍然可以在工作目录中使用,假设您尚未修改它们并且尚未删除它们等等.但是,只有在您的存储库中没有任何其他内容时,这样做才是安全的.在第一次提交存储库的问题中描述的情况 - 然后后悔它,它是安全的.但是,很多时候,它并不安全.
这样做也可以安全地删除不需要的克隆存储库; 它对从中克隆的存储库没有任何损害.它会丢弃您在副本中完成的任何操作,但不会影响原始存储库.
要小心,但在满足前提条件时安全有效.
如果您已经对要保留的存储库执行了其他操作,那么这不是适当的技术 - 您的存储库不再满足此前提条件.
小智 7
最后我会投入对我有用的东西。我需要删除存储库上的初始提交,因为隔离数据已放错位置,提交已被推送。
确保您当前位于正确的分支上。
git checkout master
git update-ref -d HEAD
git commit -m "Initial commit
git push -u origin master
这才能够解决问题。
重要的
这是在不可公开访问的内部存储库上,如果您的存储库可公开访问,请假设您需要恢复的任何内容已被其他人拉下。
| 归档时间: |
|
| 查看次数: |
76517 次 |
| 最近记录: |