我如何删除GitHub的提交?
我“不小心”向GitHub推送提交。
是否有可能删除这个提交?
我想恢复我的GitHub仓库,因为它是在这个提交之前。
注意:请参阅下面的注释中的替代
git rebase -i
git reset --soft HEAD^
首先,删除本地存储库上的提交。 你可以用git rebase -i
来做到这一点。 例如,如果这是你最后一次提交,你可以做git rebase -i HEAD~2
并在popup的编辑器窗口中删除第二行。
然后,通过使用git push origin +branchName
强制推送到GitHub
参见Git Magic第5章:历史的教训 – 然后一些更多的信息(即如果你想删除旧的提交)。
哦,如果你的工作树很脏,你必须先做一个git stash
,然后git stash apply
。
git push -f origin HEAD^:master
这应该“撤销”推动。
如果这只是一个错误而容易回复(也许你分叉了一个回购,然后推到原来的,而不是一个新的)这是另一种可能性:
git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479
显然交换这个号码为你想要返回的提交号码。
一旦你再次推动,以后的一切将被删除。 要做到这一点,下一步将是:
git push --force
-
git log
来找出你想要恢复的提交 -
git push origin +7f6d03:master
而7f6d03是错误推送提交之前的提交。+
是为了force push
就是这样。
这是一个很好的指南,解决您的问题,简单而简单!
你需要清除你的caching,把它完全擦掉。 这个来自git的帮助页面将帮助你。 (它帮助我) http://help.github.com/remove-sensitive-data/
使用git revert
恢复您的推送。
git-revert – 恢复一些现有的提交
git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>... git revert --continue git revert --quit git revert --abort
恢复相关修补程序引入的更改,并logging一些新的提交logging。 这要求你的工作树是干净的(没有修改HEAD提交)。
1. git reset HEAD^ --hard 2. git push origin -f
这为我工作。
要从远程存储库中删除提交:
git push -f origin last_known_good_commit:branch_name
为了从您的本地存储库中删除提交:
git reset --hard HEAD~1
链接
如果您想在删除后保留提交更改:
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> ...
要么
git commit -m "<new_commit_message>" .
在Github上查找你想要成为分支头部的提交规则并使用下面的命令:
git push origin +[ref]:[branchName]
在你的情况下,如果你只想返回一个提交,find那个提交的开始,例如说是7f6d03,并且你想改变的分支的名字,比如它是master,请执行以下操作:
git push origin +7f6d03:master
加号字符被解释为--force
,这是必要的,因为你正在重写历史。
请注意,无论--force
您--force
进行提交,都可能会重写合并您的分支的其他人的历史logging。 但是,如果您在任何人合并您的分支之前迅速发现问题,则不会有任何问题。
您需要知道您想要恢复的提交的提交哈希。 你可以从GitHuburl得到它: https : //github.com/your-organization/your-project/commits/master
假设从提交(你想要回到)的散列是“99fb454”(长版“99fb45413eb9ca4b3063e07b40402b136a8cf264”),那么你所要做的就是:
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264 git push --force
如果你这样做是因为你在提交中有敏感的数据,在这里使用其他的答案是不安全的 (除了subutux的,我将扩大)。
这个github指南build议使用外部工具,但我更喜欢使用内置的工具。
首先, 做一个你的仓库的备份 。 然后:
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
以防万一,您可能需要保留一段时间的本地备份。
保留分支和合并结构对于使用--preserve-merges
选项进行rebase时非常重要:
git rebase --preserve-merges -i HEAD^^
将本地更改保存在某个位置(备份)
您可以浏览您最近的提交,然后通过单击“复制全部SHA”button将其发送到剪贴板来select提交哈希。
如果你的最后一个提交哈希是g0834hg304gh3084gh(比如说)
你必须运行:
git push origin +g0834hg304gh3084gh:master
使用您之前复制的散列使其成为“HEAD”修订版。
添加您所需的本地更改。 完成;)
在terminal上运行这个命令。
git reset HEAD~n
您可以删除本地回购的最后n个提交,例如HEAD〜2。 继续在你的仓库上强制使用git push。
git push -f origin <branch>
希望这可以帮助!
对于GitHub – 重置您的提交(HARD)在您当地的回购,并创build一个新的分支。 推新。 删除旧分支。 (如果您要删除主分支,请将新分支作为默认分支)
添加/删除文件,以您想要的方式获取内容:
git rm classdir git add sourcedir
然后修改提交:
git commit --amend
之前的错误提交将被编辑,以反映新的索引状态 – 换句话说,它会像你从来没有犯下的错误
请注意,如果您尚未推送,则只能执行此操作。 如果你推了,那么你只需要正常提交修复。
重写历史不是很好。 如果我们使用git revert <commit_id>
,它会创build一个干净的提交id的反向提交。
这样,历史不会被重写,相反,每个人都知道已经有了回归。