我在一个分支上执行了git push -f
,现在丢失了另一个人的工作。
我能在github上看到另一个人的工作(显示在活动中),但不在远程分支(我推送我的更改的地方)。不幸的是,我没有将本地存储库与远程同步。所以我没有其他人的代码在本地。有没有办法让我把它取到本地并恢复?
我在一个分支上执行了git push -f
,现在丢失了另一个人的工作。
我能在github上看到另一个人的工作(显示在活动中),但不在远程分支(我推送我的更改的地方)。不幸的是,我没有将本地存储库与远程同步。所以我没有其他人的代码在本地。有没有办法让我把它取到本地并恢复?
完成上述步骤后,另一个人可以使用 "git push -f" 命令重新上传他的分支。如果他有新提交,则您将不得不确定他上次推送的提交是哪个,但我相当确定不会丢失任何实际提交。如果另一个人使用了 "git pull -f" 命令,则即使如此,他也可以使用 "git reflog" 命令恢复其本地分支。
由于您正在使用 Github,您还可以查看 https://dev59.com/Xmkw5IYBdhLWcg3wJXQh#35273807。显然,Github 的事件 API 可能很有用。
您可以通过REST-API访问GitHub的引用日志。
这将展示给您事件:
$ curl https://api.github.com/repos/<user>/<repo>/events
POST /repos/<user>/<repo>/git/refs
{
"ref": "refs/heads/featureA",
"sha": "aa218f56b14c9653891f9e74264a383fa43fefbd"
}
或者使用curl命令:
$ curl -i -H "Accept: application/json" -H "Content-Type: application/json" \
-X POST -d '{"ref":"refs/heads/featureA", \
"sha":"aa218f56b14c9653891f9e74264a383fa43fefbd"}' \
https://api.github.com/repos/<user>/<repo>/git/refs
我不是Git的用户,但几天前我偶然看到了这篇文章,我猜这个也有解决你问题的方法。
# undo the last commit, but leave the changes available
git reset HEAD~ --soft
git stash
# move to the correct branch
git checkout name-of-the-correct-branch
git stash pop
git add . # or add individual files
git commit -m "your message here"
# now your changes are on the correct branch
push -f
。如果Git提示有冲突,请假设它知道最好的,然后解决冲突。 - Panagiotis Kanavosgit fsck --no-reflogs
命令来查找所有悬空的提交。这些悬空的提交中有一个是在强制推送前由分支指向的。如果没有列出任何悬空的提交,则该提交可能被其他分支或标签引用。你可以尝试去找到它。虽然我不使用Github,但我听说Github有一项记录reflogs之类东西的功能。 - ElpieKaygit fsck --no-reflogs
。 - sashoalm