GIT rebase 覆盖所有更改
GIT rebase overwritten all changes
好吧,这次我真的搞砸了 GIT:我在一个项目上离线工作了几天,今天我尝试 commit/push 对 GitHub 的更改。不知何故,有一些冲突,我试图用 rebase 来解决。我最终在一个分支 REBASE 1/2 中,我使用了跳过选项和移动到 REBASE 2/2,我再次跳过并且......好吧,你猜怎么着?我搞砸了太多,以至于我最终用推送到 GitHub 的最新提交覆盖了我的本地项目,浪费了 11 天的工作!
现在,因为我确信我在变基之前已经上演并提交了我的更改,所以我认为有一种方法可以恢复这场灾难;但是当我检查 git reflog 时,这是第一行:
2e73363 HEAD@{0}:变基完成:返回 refs/heads/master
问题是,这个提交号是11天前的,不是今天的!
所以我的问题是:
- 我今天的提交在哪里?
- 有什么方法可以恢复我今天所做的 rebase,恢复我对项目的所有更改?
编辑:这是来自 reflog 的完整测试:
$ git reflog
2e73363 HEAD@{0}: rebase finished: returning to refs/heads/master
2e73363 HEAD@{1}: rebase: checkout origin/master
2ff234f HEAD@{2}: commit: added .classpath to commit
8ddcf79 HEAD@{3}: commit: fixed few errrors
e5a6da9 HEAD@{4}: commit: adding hibernate to DAO classes
c6c10bf HEAD@{5}: commit: fixed problems with commit after detached head
0e527a6 HEAD@{6}: commit (merge): added Spring Security
f4ad11a HEAD@{7}: checkout: moving from tmp to master
a0a1597 HEAD@{8}: checkout: moving from master to tmp
f4ad11a HEAD@{9}: checkout: moving from new-branch to master
f4ad11a HEAD@{10}: checkout: moving from master to new-branch
f4ad11a HEAD@{11}: checkout: moving from master to master
f4ad11a HEAD@{12}: checkout: moving from 96e7903b784ae435c042abab33939327b081c138 to master
96e7903 HEAD@{13}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
f4ad11a HEAD@{14}: checkout: moving from a0a1597361522b25f4c12463f1bfa2673721eb7b to master
a0a1597 HEAD@{15}: checkout: moving from master to a0a1597
f4ad11a HEAD@{16}: checkout: moving from a0a1597361522b25f4c12463f1bfa2673721eb7b to master
a0a1597 HEAD@{17}: commit: commit from detached head
c40dc30 HEAD@{18}: commit: added Spring Security to admin page
96e7903 HEAD@{19}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
f4ad11a HEAD@{20}: revert: Revert "commicommitt"
96e7903 HEAD@{21}: checkout: moving from 96e7903b784ae435c042abab33939327b081c138 to master
96e7903 HEAD@{22}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
96e7903 HEAD@{23}: commit: commicommitt
f9fc7a1 HEAD@{24}: merge refs/remotes/origin/master: Fast-forward
ff7fc6d HEAD@{25}: commit (initial): Initial commit
这是 reflog master 的输出:
$ git reflog master
2e73363 master@{0}: rebase finished: refs/heads/master onto 2e7336369502768f42174019bf1efbfc9b113d9f
2ff234f master@{1}: commit: added .classpath to commit
8ddcf79 master@{2}: commit: fixed few errrors
e5a6da9 master@{3}: commit: adding hibernate to DAO classes
c6c10bf master@{4}: commit: fixed problems with commit after detached head
0e527a6 master@{5}: commit (merge): added Spring Security
f4ad11a master@{6}: revert: Revert "commicommitt"
96e7903 master@{7}: commit: commicommitt
f9fc7a1 master@{8}: merge refs/remotes/origin/master: Fast-forward
ff7fc6d master@{9}: commit (initial): Initial commit
你检查过ORIG_HEAD
了吗?应该还是指向rebase前的分支头吧
尽管如此git reflog master
,或者用你的分支替换,应该显示所有提交 master 已经在。
好的我解决了:使用git reflog master
,我找到了rebase之前的提交号;然后,我用 git reset --hard
恢复到那个提交。
好吧,这次我真的搞砸了 GIT:我在一个项目上离线工作了几天,今天我尝试 commit/push 对 GitHub 的更改。不知何故,有一些冲突,我试图用 rebase 来解决。我最终在一个分支 REBASE 1/2 中,我使用了跳过选项和移动到 REBASE 2/2,我再次跳过并且......好吧,你猜怎么着?我搞砸了太多,以至于我最终用推送到 GitHub 的最新提交覆盖了我的本地项目,浪费了 11 天的工作!
现在,因为我确信我在变基之前已经上演并提交了我的更改,所以我认为有一种方法可以恢复这场灾难;但是当我检查 git reflog 时,这是第一行:
2e73363 HEAD@{0}:变基完成:返回 refs/heads/master
问题是,这个提交号是11天前的,不是今天的!
所以我的问题是: - 我今天的提交在哪里? - 有什么方法可以恢复我今天所做的 rebase,恢复我对项目的所有更改?
编辑:这是来自 reflog 的完整测试:
$ git reflog
2e73363 HEAD@{0}: rebase finished: returning to refs/heads/master
2e73363 HEAD@{1}: rebase: checkout origin/master
2ff234f HEAD@{2}: commit: added .classpath to commit
8ddcf79 HEAD@{3}: commit: fixed few errrors
e5a6da9 HEAD@{4}: commit: adding hibernate to DAO classes
c6c10bf HEAD@{5}: commit: fixed problems with commit after detached head
0e527a6 HEAD@{6}: commit (merge): added Spring Security
f4ad11a HEAD@{7}: checkout: moving from tmp to master
a0a1597 HEAD@{8}: checkout: moving from master to tmp
f4ad11a HEAD@{9}: checkout: moving from new-branch to master
f4ad11a HEAD@{10}: checkout: moving from master to new-branch
f4ad11a HEAD@{11}: checkout: moving from master to master
f4ad11a HEAD@{12}: checkout: moving from 96e7903b784ae435c042abab33939327b081c138 to master
96e7903 HEAD@{13}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
f4ad11a HEAD@{14}: checkout: moving from a0a1597361522b25f4c12463f1bfa2673721eb7b to master
a0a1597 HEAD@{15}: checkout: moving from master to a0a1597
f4ad11a HEAD@{16}: checkout: moving from a0a1597361522b25f4c12463f1bfa2673721eb7b to master
a0a1597 HEAD@{17}: commit: commit from detached head
c40dc30 HEAD@{18}: commit: added Spring Security to admin page
96e7903 HEAD@{19}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
f4ad11a HEAD@{20}: revert: Revert "commicommitt"
96e7903 HEAD@{21}: checkout: moving from 96e7903b784ae435c042abab33939327b081c138 to master
96e7903 HEAD@{22}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
96e7903 HEAD@{23}: commit: commicommitt
f9fc7a1 HEAD@{24}: merge refs/remotes/origin/master: Fast-forward
ff7fc6d HEAD@{25}: commit (initial): Initial commit
这是 reflog master 的输出:
$ git reflog master
2e73363 master@{0}: rebase finished: refs/heads/master onto 2e7336369502768f42174019bf1efbfc9b113d9f
2ff234f master@{1}: commit: added .classpath to commit
8ddcf79 master@{2}: commit: fixed few errrors
e5a6da9 master@{3}: commit: adding hibernate to DAO classes
c6c10bf master@{4}: commit: fixed problems with commit after detached head
0e527a6 master@{5}: commit (merge): added Spring Security
f4ad11a master@{6}: revert: Revert "commicommitt"
96e7903 master@{7}: commit: commicommitt
f9fc7a1 master@{8}: merge refs/remotes/origin/master: Fast-forward
ff7fc6d master@{9}: commit (initial): Initial commit
你检查过ORIG_HEAD
了吗?应该还是指向rebase前的分支头吧
尽管如此git reflog master
,或者用你的分支替换,应该显示所有提交 master 已经在。
好的我解决了:使用git reflog master
,我找到了rebase之前的提交号;然后,我用 git reset --hard
恢复到那个提交。