mrd*_*enz 77 git git-push git-commit
我刚使用--force选项将错误的源代码提交给了我的项目.
是否有可能还原?我知道所有以前的分支都被使用-f选项覆盖,所以我可能搞砸了我之前的修订版.
Cam*_*ner 47
Git通常不会扔掉任何东西,但从中恢复可能仍然很棘手.
如果您有正确的源,那么您可以使用该--force选项将其推入遥控器.除非你告诉它,否则Git不会删除任何分支.如果您确实丢失了提交,那么请查看这个有用的指南来恢复提交.如果你知道你想要的提交的SHA-1那么你可能没问题.
最好的办法:备份所有内容,查看本地存储库中的内容.如果可能,在遥控器上执行相同操作.使用git fsck,看看你是否能恢复的东西,最重要的不运行git gc.
最重要的是,永远不要使用该--force选项,除非你真的,真的是这个意思.
小智 45
如果你知道提交哈希,那很容易,只需重新创建你的分支.
Run Code Online (Sandbox Code Playgroud)5794458...b459f069 master -> master (forced update)
删除远程分支:
git push origin :master
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令重新创建分支:
git checkout 5794458
git branch master
git push origin master
Run Code Online (Sandbox Code Playgroud)
Abd*_*fid 23
# work on local master
git checkout master
# reset to the previous state of origin/master, as recorded by reflog
git reset --hard origin/master@{1}
# at this point verify that this is indeed the desired commit.
# (if necessary, use git reflog to find the right one, and
# git reset --hard to that one)
# finally, push the master branch (and only the master branch) to the server
git push -f origin master
Run Code Online (Sandbox Code Playgroud)
是的,您可以在之后恢复提交 git push -f your_branch
来自 Doc 的文字:
修剪早于指定时间的条目。如果未指定此选项,则过期时间取自配置设置 gc.reflogExpire,默认为 90 天。--expire=all 修剪条目,无论其年龄如何;--expire=never 关闭可访问条目的修剪(但请参阅--expire-unreachable)。
所以你可以这样做:
1- git reflog
2- 你选择 Head_Number 你想用什么来恢复 git reset –hard HEAD@{HEAD-NUMBER}
3-您可以通过以下方式查看此头上的所有提交 git cherry -v branch_name
4-最后你应该强制推送 git push -f branch_name
或者
1- 从您的 GIT 客户端(界面)获取 SHA 的数量
git reset --hard commit_SHA
Run Code Online (Sandbox Code Playgroud)
2-力推
git push -f your_branch
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
如果您不在强制推送来自的本地仓库中,则在原始/主级别无法恢复.但是如果你有幸使用GitHub或GitHub for Enterprise,你可以查看REST API并检索丢失的提交作为补丁,例如:
https://api.github.com/repos/apache/logging-log4j2/commits/889232e28f3863d2a17392c06c1dd8cac68485de
git apply patch.patch && git commit -m"restored commit"&& git push origin master
如果之前的推送不是来自本地存储库,则恢复丢失的提交甚至找出丢失的提交的另一种方法是查看 CI 机器。
如果您有一项工作在每次提交(或一系列连续提交)后测试主分支,那么您可以查看它最后测试的内容。这就是您需要恢复的提交。
CI 机器甚至可能保留存储库的本地克隆,您可以从中执行此恢复。
资料来源:可能是持续交付:通过构建、测试和部署自动化实现可靠的软件发布(Addison-Wesley 签名系列 (Fowler))