我如何删除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 
  1. git log来找出你想要恢复的提交

  2. 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的反向提交。

这样,历史不会被重写,相反,每个人都知道已经有了回归。