hec*_*rsq 1619 git github git-commit
我"意外地"向GitHub推送了一个提交.
是否可以删除此提交?
我想恢复我提交之前的GitHub存储库.
Can*_*der 1154
注:请参阅
git rebase -i以下评论中的替代方案 -
git reset --soft HEAD^
首先,删除本地存储库上的提交.你可以使用git rebase -i.例如,如果它是您的最后一次提交,您可以执行git rebase -i HEAD~2并删除弹出的编辑器窗口中的第二行.
然后,使用强制推送到GitHub git push origin +branchName --force
请参阅Git Magic第5章:历史课程 - 然后了解更多信息(例如,如果您要删除较旧的提交).
哦,如果你的工作树很脏,你必须先做一个git stash,然后再做一个git stash apply.
Dus*_*tin 923
git push -f origin HEAD^:master
Run Code Online (Sandbox Code Playgroud)
这应该"撤消"推动.
Cod*_*rus 336
如果只是一个错误(也许你分叉一个回购,然后最终推到原来而不是一个新的),一个简单的恢复,这是另一种可能性:
git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479
Run Code Online (Sandbox Code Playgroud)
显然,将该数字换成要返回的提交数.
再次按下后,一切都会被删除.为此,下一步将是:
git push --force
Run Code Online (Sandbox Code Playgroud)
Lou*_*adi 54
请注意,如果要删除的提交是最后提交的提交,则此解决方案有效.
1 - 复制您喜欢的提交引用从日志中返回:
git log
Run Code Online (Sandbox Code Playgroud)
2 - 将git重置为提交引用:
git reset <commit_ref>
Run Code Online (Sandbox Code Playgroud)
3 - 存储/存储来自错误提交的本地更改,以便在推送到远程后使用:
git stash
Run Code Online (Sandbox Code Playgroud)
4 - 将更改推送到远程存储库(-f或--force):
git push -f
Run Code Online (Sandbox Code Playgroud)
5 - 将存储的更改恢复到本地存储库:
git stash apply
Run Code Online (Sandbox Code Playgroud)
7 - 如果您在更改中有未跟踪/新文件,则需要在提交之前将它们添加到git:
git add .
Run Code Online (Sandbox Code Playgroud)
6 - 添加您需要的任何额外更改,然后提交所需的文件,(或使用点'.'而不是声明每个文件名,以提交本地存储库中的所有文件:
git commit -m "<new_commit_message>" <file1> <file2> ...
Run Code Online (Sandbox Code Playgroud)
要么
git commit -m "<new_commit_message>" .
Run Code Online (Sandbox Code Playgroud)
小智 35
您需要清除缓存以完全擦除它.这个来自git的帮助页面可以帮到你.(它帮助了我) http://help.github.com/remove-sensitive-data/
Jyo*_*ash 26
使用git revert用于恢复您的推动.
git-revert - 恢复一些现有的提交
Run Code Online (Sandbox Code Playgroud)git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>... git revert --continue git revert --quit git revert --abort
还原相关修补程序引入的更改,并记录一些记录它们的新提交.这需要您的工作树是干净的(没有HEAD提交的修改).
Hil*_*len 23
1. git reset HEAD^ --hard
2. git push origin -f
Run Code Online (Sandbox Code Playgroud)
这对我有用.
geo*_*ano 17
要从远程存储库中删除提交:
git push -f origin last_known_good_commit:branch_name
Run Code Online (Sandbox Code Playgroud)
为了从本地存储库中删除提交:
git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)
Eka*_*m E 16
删除最近的提交,保留您已完成的工作:
git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)
删除最近的提交,破坏您已完成的工作:
git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)
Ben*_*uer 10
您需要知道要恢复的提交中的提交哈希值.您可以从GitHub URL获取它,例如:https://github.com/your-organization/your-project/commits/master
让我们说提交中的哈希值(你要返回的地方)是"99fb454"(长版本"99fb45413eb9ca4b3063e07b40402b136a8cf264"),那么你所要做的就是:
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
Run Code Online (Sandbox Code Playgroud)
在Github上找到您想要成为分支头的提交的ref规范,并使用以下命令:
git push origin +[ref]:[branchName]
在您的情况下,如果您只想返回一个提交,请找到该提交的ref的开头,例如它是7f6d03,以及您想要更改的分支的名称,例如它是master,以及请执行下列操作:
git push origin +7f6d03:master
加号字符被解释为--force,因为您正在重写历史记录,所以这是必要的.
请注意,无论--force何时提交,您都可能会重写合并分支的其他人的历史记录.但是,如果您快速发现问题(在其他任何人合并您的分支之前),您将不会遇到任何问题.
如果你这样做是因为你在提交中有敏感数据,那么在这里使用其他答案是不安全的(除了subutux,我将扩展).
关于这个的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
Run Code Online (Sandbox Code Playgroud)
在此之后,确保存储库处于您想要的状态.您可能希望对备份进行区分.
如果您确定它是正确的,那么:
#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all
Run Code Online (Sandbox Code Playgroud)
您可能希望保留本地备份一段时间,以防万一.
在终端上运行此命令.
git reset HEAD~n
Run Code Online (Sandbox Code Playgroud)
您可以从本地仓库删除最后n次提交,例如HEAD~2.在您的存储库上继续强制git push.
git push -f origin <branch>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
854271 次 |
| 最近记录: |