我刚刚使用错误的来源来使用我的项目 --force 选项。

可以恢复吗?我知道所有以前的分支都已使用 -f 选项,所以我可能已经搞砸了以前的修订。

有帮助吗?

解决方案

Git通常不会丢掉任何东西,但是从中恢复仍然可能仍然很棘手。

如果您有正确的源,则可以将其推入遥控器 --force 选项。除非您告诉您,否则Git不会删除任何分支机构。如果您实际上失去了承诺,请看一下 这个恢复提交的有用指南. 。如果您知道所需的提交的sha-1,那么您可能还可以。

最好的事情要做:备份所有内容,看看您本地存储库中的内容。如果可能的话,请在遥控器上执行相同的操作。利用 git fsck 看看您是否可以恢复事物,最重要的是 别跑 git gc.

首先,切勿使用 --force 选项,除非您真的是真的。

其他提示

如果您知道提交哈希,这很容易,只需重新创建您的分支机构即可。

5794458...b459f069 master -> master (forced update)

删除远程分支:

git push origin :master

然后使用以下命令重新创建您的分支:

git checkout 5794458
git branch master
git push origin master

解决方案已经提到 这里

# 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

如果您不在强制推动的本地存储库中,则在原点/主级别上没有办法恢复。但是如果你是 幸运的 足够使用 github 或者 企业的Github, ,您可以看看 休息 API和检索失去的提交作为补丁,示例:

  1. 列出事件并找到提示SHA1长格式

https://api.github.com/repos/apache/logging-log4j2/events

  1. 下载丢失的提交并在JSON PATH .FILES []/PATCH中检索相关补丁程序

https://api.github.com/repos/apache/logging-log4j2/commits/889232E28F3863D2A17392C06C1DD8CAC6848485DE

  1. 在本地申请并再次推动

git apply patch.patch && git comm

我做了同样的事情,同时仅撤消一个文件的最后一次推动。最终回到了存储库的原始状态。我在Linus上使用了Linus的Git命令。幸运的是,该副本仍然完好无损。

我所做的就是(在疯狂地制作了更多的本地仓库副本之后):

git add .
git status

(它说,原籍/主人在68次提交的领先地位,很好...所有这些都是我删除的所有提交)

git remote set-url origin <GIT_SSH_URL>
git push

一切都按照我进行有力的推动之前的方式恢复了。要记住的最重要的事情是不要进行git检查。在您强行推动之后。但是最好的做法是禁用推送选项。我再也不会使用它了。学到了我的教训!

恢复丢失的承诺甚至弄清楚丢失的提交的另一种方法,如果以前的推动不是来自本地仓库,则是查看您的CI机器。

如果您的工作在每个提交(或连续的一系列提交)之后测试主分支,您应该拥有,您可以查看其最后测试的内容。那就是您需要还原的承诺。

CI机器甚至可以保留回购的本地克隆,您可以从中执行此恢复。

资料来源:可能 连续交付:可靠的软件通过构建,测试和部署自动化(Addison-Wesley签名系列(Fowler))发布

在这里您可以阅读决策 https://evilmartians.com/chronicles/git-push---force-and-how-how-to-deal-with-it

第二个帮助了我。我做错了这些命令

1) (some-branch) git pull -> correct command was git pull origin some-branch

2) (some-branch) git push -f origin some-branch

在这些命令之后,我输掉了三个提交。为了恢复它们,我看着我错误地“ git拉”的终端,看到了在那里的输出

60223bf ... 0b258eb Some-Branch-> Origin/Some-Branch

第二个哈希0B258EB正是我所需要的。所以,我接受了这个哈希并制作命令

git push --force origin 0b258eb:some-branch
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top