How can I remove a commit on GitHub?
我"不小心"向Github提交了一个承诺。
是否可以删除此提交?
我想还原我的Github存储库,就像这次提交之前一样。
Note: please see alternative to
git rebase -i in the comments below—
git reset --soft HEAD^
号
首先,删除本地存储库上的提交。您可以使用
然后,使用
请参阅Git Magic第5章:历史教训-然后参阅一些了解更多信息(例如,如果您希望删除较旧的提交)。
哦,如果你的工作树很脏,你必须先做一个
1 | git push -f origin HEAD^:master |
这将"撤销"推。
如果只是一个错误(可能是你分叉了一个回购,然后最终推到了原来的而不是一个新的),那么这是另一种可能性:
1 | git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479 |
号
显然,将该数字替换为要返回的提交数。
此后的所有内容将在您再次按下时被删除。为此,下一步将是:
1 | git push --force |
埃多克斯1〔13〕要找出要还原的提交
埃多克斯1〔9〕而7F6D03是错误推送提交之前的提交。
就这样。
这里有一个很好的指南,可以轻松简单地解决您的问题!
如果要保留删除后的提交更改:
请注意,如果要删除的提交是最后一个提交的提交,则此解决方案可以工作。
1-从日志中复制要返回的提交引用:
1 | git log |
。
2-将git重置为提交引用:
1 | git reset <commit_ref> |
3-将错误提交的本地更改存储到远程后再使用:
1 | git stash |
。
4-将更改推送到远程存储库,(-f或--force):
1 | git push -f |
5-将存储的更改返回到本地存储库:
1 | git stash apply |
。
7-如果更改中有未跟踪/新文件,则在提交之前需要将其添加到Git中:
1 | git add . |
号
6-添加您需要的任何额外更改,然后提交所需的文件(或使用点"."而不是声明每个文件名),以提交本地存储库中的所有文件:
1 | git commit -m"<new_commit_message>" <file1> <file2> ... |
号
或
1 | git commit -m"<new_commit_message>" . |
号
您需要清除缓存才能将其完全清除。Git的帮助页面将帮助您解决问题。(它帮助了我)http://help.github.com/remove-sensitive-data/
使用
git-revert - Revert some existing commits
1
2
3
4 git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort
号
还原相关修补程序引入的更改,并记录记录这些更改的一些新提交。这要求您的工作树是干净的(没有来自head commit的修改)。
1 2 | 1. git reset HEAD^ --hard 2. git push origin -f |
。
这对我有用。
要从远程存储库中删除提交,请执行以下操作:
1 | git push -f origin last_known_good_commit:branch_name |
要从本地存储库中删除提交,请执行以下操作:
1 | git reset --hard HEAD~1 |
。
链接
删除最近的提交,保留您所做的工作:
1 | git reset --soft HEAD~1 |
号
删除最近的提交,销毁您所做的工作:
1 | git reset --hard HEAD~1 |
。
您需要从要恢复到的提交中知道提交哈希。您可以从Github URL获取它,如:https://github.com/your-organization/your-project/commits/master
假设commit的散列(您要返回到的地方)是"99FB454"(长版本"99FB45413EB9CA4B3063E07B40402B136A8CF264"),那么您所要做的就是:
1 2 | git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264 git push --force |
在Github上找到要成为分支机构负责人的提交的参考规范,并使用以下命令:
埃多克斯1〔8〕
在您的情况下,如果您只想返回一个提交,请找到该提交的引用的开头,例如它是7F6D03,并且要更改的分支的名称,例如它是master,并执行以下操作:
埃多克斯1〔9〕
加号被解释为
请注意,任何时候只要你承诺,你都可能改写其他民族合并你的分支的历史。但是,如果你很快发现了问题(在其他人合并你的分支之前),你就不会有任何问题。
如果您这样做是因为在提交中有敏感的数据,那么使用这里的其他答案是不安全的(Subutux除外,我将进一步讨论)。
上面的Github指南建议使用外部工具,但我更喜欢使用内置工具。
首先,备份存储库。然后:
1 2 3 | 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 |
在此之后,请确保存储库处于所需的状态。您可能希望与备份进行比较。
如果您确定它是正确的,那么:
1 2 3 | #get rid of old unreferenced commits (including the data you want to remove) git gc --prune=now git push origin --force --all |
号
您可能需要保留本地备份一段时间,以防万一。
在终端上运行这个命令。
1 | git reset HEAD~n |
您可以从本地回购中删除最后n个提交,例如head~2。继续对您的存储库执行强制git push。
1 | git push -f origin <branch> |
。
希望这有帮助!
为了保持分支和合并结构,在执行REBASE时使用
1 | git rebase --preserve-merges -i HEAD^^ |
。
首先将本地更改保存在一侧的某个位置(备份)
您可以浏览最近的提交,然后通过单击选择提交哈希"复制完整的sha"按钮将其发送到剪贴板。
如果最后一个提交哈希是,那么假设g0834hg304gh3084gh(例如)
你必须跑:
埃多克斯1〔12〕
使用之前复制的散列值使其成为"head"修订。
添加所需的本地更改。完成;)
对于Github
- 重置本地存储库中的提交(硬)
- 创建新分支
- 推送新的
- 删除旧分支(如果要删除主分支,则将新分支作为默认分支)
如果要删除do interactive rebase,
并从列表中删除您想要的提交…
按ctrl+x(ubuntu)或:wq(centos)保存更改
第二种方法,做还原,
1 | git revert 29f4a2 #your commit ID |
号
这将还原特定的提交
在Github桌面中,您只需右键单击提交并将其还原,这将创建一个新的提交来撤消更改。
意外提交仍将在您的历史记录中(例如,如果您意外提交了API密钥或密码,这可能是一个问题),但代码将被还原。
这是最简单和最容易的选择,接受的答案更全面。
添加/删除文件以获得所需的内容:
1 2 | git rm classdir git add sourcedir |
然后修改承诺:
1 | git commit --amend |
。
前面的错误提交将被编辑以反映新的索引状态——换句话说,它将像您从未犯过错误一样。
请注意,只有在还没有推的情况下才应该这样做。如果你已经推了,那么你只需要正常地提交一个修复。
重写历史不太好。如果我们使用
这样,历史就不会被改写,相反,每个人都知道历史已经被改写了。