我“不小心”向GitHub推送了一个提交。
是否可以删除此提交?
我想恢复提交之前的GitHub存储库。
我“不小心”向GitHub推送了一个提交。
是否可以删除此提交?
我想恢复提交之前的GitHub存储库。
当前回答
如果您希望在删除后保留提交更改:
请注意,如果要删除的提交是最后一次提交的提交,则此解决方案有效。
1-从日志中复制要返回的提交引用:
git log
2-将git重置为提交引用:
git reset <commit_ref>
3-保存/存储错误提交的本地更改,以便在推送到远程后稍后使用:
git stash
4-将更改推送到远程存储库(-f或--force):
git push -f
5-将存储的更改恢复到本地存储库:
git stash apply
7-如果您在更改中有未跟踪的/新的文件,您需要在提交之前将它们添加到git中:
git add .
6-添加所需的任何额外更改,然后提交所需的文件(或使用点“.”而不是声明每个文件名),以提交本地存储库中的所有文件:
git commit -m "<new_commit_message>" <file1> <file2> ...
or
git commit -m "<new_commit_message>" .
其他回答
使用git-restore恢复推送。
git-restore-还原一些现有提交git-restore[-edit|--no edit][-n][-m父编号][-s]<commit>。。。git revert--继续git revert—退出git revert—中止
还原相关修补程序引入的更改,并记录记录这些更改的一些新提交。这需要你的工作树是干净的(没有来自HEAD提交的修改)。
注意:git-restore用于记录一些新的提交,以反转一些早期提交的效果(通常只有一个错误的提交)。如果要丢弃工作目录中所有未提交的更改,应该看到git reset,特别是--hard选项。
如果您想删除do interactive rebase,
git rebase-i头~4
4表示要显示的提交总数,计算您的提交并相应地进行更改
并从列表中删除您想要的提交。。。
按Ctrl+X(ubuntu)或:wq(centos)保存更改
第二种方法,进行还原,
git revert 29f4a2 #your commit ID
这将恢复特定的提交
您需要清除缓存以将其完全清除。git的这个帮助页面将帮助您。(这对我有帮助)http://help.github.com/remove-sensitive-data/
重写历史不是很好。若我们使用git-restore<commit_id>,它将创建所述提交id的干净反向提交。
这样,历史就不会被改写了,相反,每个人都知道,历史已经发生了逆转。
如果你这样做是因为你在提交中有敏感数据,那么使用这里的其他答案是不安全的(除了subtux的,我将进一步讨论)。
github指南建议使用外部工具,但我更喜欢使用内置工具。
首先,备份存储库。然后:
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all
之后,确保存储库处于所需的状态。您可能需要与备份进行比较。
如果你确定这是正确的,那么:
#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all
您可能需要保留本地备份一段时间,以防万一。