从 git rebase 出错中恢复
Recover from git rebase gone wrong
事情是这样的:
当我在推送时间注意到我的 3 次提交被拒绝时,我正在我的回购协议的主分支上工作,因为 "Bob" 直接推送到主分支。
为了解决这个问题,我通过
创建了一个分支 "secondary"
git checkout -b secondary
git push -u origin secondary
此时我犯了一个错误,我忘了git将origin master(bob patches)拉入secondary。我做了一个 git 变基,删除了 "bob" 完成的 9 次提交,然后做了一个 git push -f。结果:所有 bob 提交都从两个分支永远消失了!
幸运的是,就在那次失败之前,我有第二台机器,它远远落后于 master,在 git 拉取之后我有 2 次提交要推送。 pull 由于合并冲突而失败,我进行了重置和 git 提取并将其留在那里,以为我会在解决 bob 问题后这样做。该机器当前状态是:
On branch master
Your branch and 'origin/master' have diverged,
and have 2 and 22 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean
从那以后我就没有运行任何命令了。这 22 次提交也包含 "Bob" 次提交。有什么方法可以让旧 "fetched" 数据再次进入 master/secondary 吗?
感谢任何帮助
如果你们两个都没有在本地提交并且它们不在服务器上,我建议使用 reflog
(https://git-scm.com/docs/git-reflog) 尝试查找并恢复它们,如果幸运的话它们没有还没有被垃圾收集。
旧的提取数据仍将存在于 refs/remotes 个分支中(在本地保存!)。
执行 git branch -a
以查看机器上所有这些遥控器及其分支,然后只需 git checkout -b <newbranchname> <remote>/<branch>
就可以了。
现在是时候回顾/刷新所有关于 DAG、refs、rtb 等“没有完全理解”的内容以及 DWIMing - 参见 git help revisions
和 git help -g
.
--
rtb's = remote tracking branch - 跟踪远程分支(有副本)的本地分支,通常保留 'read only'.
DWIM - 照我的意思去做。因此 / 将为您获取 'ref/remotes/remote/branch' 而不是 'refs/heads/branch' 等
事情是这样的: 当我在推送时间注意到我的 3 次提交被拒绝时,我正在我的回购协议的主分支上工作,因为 "Bob" 直接推送到主分支。
为了解决这个问题,我通过
创建了一个分支 "secondary"git checkout -b secondary
git push -u origin secondary
此时我犯了一个错误,我忘了git将origin master(bob patches)拉入secondary。我做了一个 git 变基,删除了 "bob" 完成的 9 次提交,然后做了一个 git push -f。结果:所有 bob 提交都从两个分支永远消失了!
幸运的是,就在那次失败之前,我有第二台机器,它远远落后于 master,在 git 拉取之后我有 2 次提交要推送。 pull 由于合并冲突而失败,我进行了重置和 git 提取并将其留在那里,以为我会在解决 bob 问题后这样做。该机器当前状态是:
On branch master
Your branch and 'origin/master' have diverged,
and have 2 and 22 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean
从那以后我就没有运行任何命令了。这 22 次提交也包含 "Bob" 次提交。有什么方法可以让旧 "fetched" 数据再次进入 master/secondary 吗?
感谢任何帮助
如果你们两个都没有在本地提交并且它们不在服务器上,我建议使用 reflog
(https://git-scm.com/docs/git-reflog) 尝试查找并恢复它们,如果幸运的话它们没有还没有被垃圾收集。
旧的提取数据仍将存在于 refs/remotes 个分支中(在本地保存!)。
执行 git branch -a
以查看机器上所有这些遥控器及其分支,然后只需 git checkout -b <newbranchname> <remote>/<branch>
就可以了。
现在是时候回顾/刷新所有关于 DAG、refs、rtb 等“没有完全理解”的内容以及 DWIMing - 参见 git help revisions
和 git help -g
.
--
rtb's = remote tracking branch - 跟踪远程分支(有副本)的本地分支,通常保留 'read only'.
DWIM - 照我的意思去做。因此 / 将为您获取 'ref/remotes/remote/branch' 而不是 'refs/heads/branch' 等