题
我“不小心”将提交推送到了 GitHub。
是否可以删除此提交?
我想将我的 GitHub 存储库恢复为此次提交之前的状态。
解决方案
注意:请参见替代在下面的评论到
git rebase -i
-
git reset --soft HEAD^
首先,删除你的本地仓库提交。您可以使用git rebase -i
做到这一点。例如,如果这是你最后一次提交,你可以做git rebase -i HEAD~2
和删除弹出的编辑窗口中的第二行。
然后,强制推动到GitHub的通过使用git push origin +branchName --force
请参阅 Git的魔术第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
就是这样。
这里 是一个非常好的指南,可以解决您的问题,简单易行!
如果你想保持提交更改删除后:
请注意,此解决方案,如果提交被删除的作品是最后一次提交的一个。的
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>" .
您将需要清除缓存把它彻底消灭。 从混帐此帮助页面将帮助你。 (它帮助我) http://help.github.com/remove-sensitive-data/
使用git revert
为恢复您的推动。
GIT-复归 - 还原一些现有提交
git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>... git revert --continue git revert --quit git revert --abort
恢复,相关的补丁引入的变化,并记录了一些新提交该记录下来。这需要你的工作树是干净的(没有从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
删除最近承诺,让你所做的工作:
git reset --soft HEAD~1
删除最近犯,破坏你所做的工作:
git reset --hard HEAD~1
查找的裁判规范的承诺,你想在Github上你的分支的头,使用如下命令:
git push origin +[ref]:[branchName]
在你的情况,如果你只是想回去一次提交,找裁判对于提交的开始,例如说这是7f6d03,你想改变分支的名称,例如说这是主,并执行以下步骤:
git push origin +7f6d03:master
在加字符被解释为--force
,因为你是重写历史,这将是必要的。
请注意,您--force
任何时候提交你可能改写其他民族的历史谁合并你的分支。不过,如果你快点抓住问题(谁都合并的分支之前),你不会有任何问题。
您需要知道您从您想要恢复到提交提交哈希值。您可以从GitHub的URL获得它,如: https://github.com/your - 组织/你的项目/款/主
让我们说从哈希提交(要回去)是“99fb454”(长版“99fb45413eb9ca4b3063e07b40402b136a8cf264”),那么所有你需要做的是:
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --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
在此之后,确保仓库是在你想要的状态。您可能要针对diff的备份。
如果你确定这是正确的,那么:
#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all
您可能希望保留本地备份了一段时间,以防万一。
在终端上运行此命令。
git reset HEAD~n
可以除去最后n从本地回购例如提交HEAD〜2。 与你的资料库力混帐推继续。
git push -f origin <branch>
希望这有助于!
要保存的分支和合流结构使用做底垫时--preserve-merges
选择是很重要的:
git rebase --preserve-merges -i HEAD^^
保存你的本地修改第一某处侧(备份)
您可以浏览您的最新提交,然后通过点击选择提交哈希 “复制完整的SHA”按钮将其发送到剪贴板。
如果您最后一次提交的哈希值是,让我们说g0834hg304gh3084gh(例如)
您必须运行:
git push origin +g0834hg304gh3084gh:master
使用你之前复制的哈希值,使其成为“HEAD”版本。
添加所需的局部变化。完成的;)
对于 GitHub
- 在本地存储库中重置您的提交(HARD)
- 创建一个新分支
- 推送新分支
- 删除旧分支(如果要删除主分支,请将新分支作为默认分支)
如果您要删除做互动底垫中,
git rebase -i HEAD~4
相应4 represents total number of commits to display count your commit and
change它
和删除提交您从列表中选择所需...
通过保存改变的 Ctrl + X键(ubuntu的)或的:WQ(centos的)强>
第二方法,请回复,
git revert 29f4a2 #your commit ID
这将恢复特定提交
这不是很好的重新写的历史。如果我们使用git revert <commit_id>
,它创建的所述提交ID的清洁反向提交。
这样,历史不重写,相反,大家都知道,出现了复归。
添加/删除文件得到的东西你想要的方式:
git rm classdir
git add sourcedir
然后修改提交:
git commit --amend
在前面的,错误的承诺将进行编辑,以反映新的索引状态 - 换句话说,它会像你从来没有摆在首位的错误
请注意,你只能这样做,如果你还没有推。如果您有推,那么你只需要提交正常修复。
在 GitHub的桌面你可以右键点击提交,并恢复它,这将创造一个新的承诺该撤消的更改。
在偶然的承诺仍然会在历史记录(这可能是一个问题,如果,例如,你不小心COMMITED API密钥或密码),但代码将被还原。
这是最简单,最容易的选择,接受的答案是比较全面的。