【发布时间】:2012-05-08 12:26:22
【问题描述】:
我正在开发一个 git 存储库,它有一个 master 分支,我们称之为 ab 分支。我的团队正在开发ab 分支,并且使用 github 有一个拉取请求工作流。我的一位队友从他的分支jeremy_ab_deletions 向ab 分支提出了拉取请求。我正在查看/测试他的更改,但是当我将它们合并到 ab 分支时,我不小心将它们合并到了 master 中,并在我发现错误之前将 master 推送到了 github。认为我可以 git-revert 我所做的更改 git revert SHA 并且它似乎有效......
我认为这已经足够了,我很高兴地切换回我的 ab 分支并继续工作。然而,现在,我意识到来自 ab 分支的先前提交应该永远最终在 master 中,都在 master 中。这……真是一团糟。由于他的分支最初是从ab 中分离出来的,然后我将其合并到master 中,所以我应该使用git revert -m 1 SHA 将其还原。
今天我试图弄清楚我到底哪里出错了,根据 git 历史和我的 reflog,我感到很困惑。首先,我尝试还原还原,然后执行 git revert -m 1 SHA 但 git 告诉我:
fatal: Mainline was specified but commit 4c431c345dfe0a856967c090932c32f153824085 is not a merge.
所以我认为可以...也许这不是合并提交,我需要针对不同的 SHA。但是看看历史,我一生都无法弄清楚其中哪一个是合并提交......
This was supposed to be on AB...
…
d985b5bcf8 Browse code
Nathan B authored 8 days ago
This was supposed to be on AB...
…
0e01911273 Browse code
Nathan B authored 8 days ago
removed unecessary tests
4c431c345d Browse code
Nathan B authored 8 days ago
Apr 17, 2012
removing un-used views and pages
a546f90ed3 Browse code
jeremychurch authored 10 days ago
说“这应该在 AB 上”的两个提交是还原提交以还原“已删除的不必要测试”和“删除未使用的视图和页面”提交。对 master 的下一次提交是今天,之前的提交是在 16 日,两者都不相关。我没有看到实际的 merge 发生在哪里。
我查看了我的 reflog,看看究竟是哪里出了问题。我使用git reset --hard HEAD@{NUM} 对 reflog 版本进行了上下调整,然后检查关键文件以查看是否存在错误更改。最后,我将范围缩小到这些 reflog:
1fe2be2 HEAD@{79}: checkout: moving from 1fe2be29c6eda9f9fc9eb0b372ee83b7c15dfc2c to jeremy_ab_deletions
1fe2be2 HEAD@{80}: HEAD@{3}: updating HEAD
4c431c3 HEAD@{81}: HEAD@{1}: updating HEAD
47a97af HEAD@{82}: commit: removed unecessary tests, routes, and controller actions
4c431c3 HEAD@{83}: merge jeremy_ab_deletions: Fast-forward
1fe2be2 HEAD@{84}: checkout: moving from master to ab
d985b5b HEAD@{85}: revert: This was supposed to be on AB...
0e01911 HEAD@{86}: revert: This was supposed to be on AB...
4c431c3 HEAD@{87}: merge jeremy_ab_deletions: Fast-forward
c121a08 HEAD@{88}: checkout: moving from jeremy_ab_deletions to master
4c431c3 HEAD@{89}: commit: removed unecessary tests
a546f90 HEAD@{90}: checkout: moving from ab_page_changes to jeremy_ab_deletions
511b340 HEAD@{91}: checkout: moving from jeremy_ab_deletions to ab_page_changes
a546f90 HEAD@{92}: pull git@github.com:REDACTED/repo.git ab-remove-stuff: Fast-forward
特别是 HEAD@{88} 这里没有错误的提交,而 HEAD@{87} 有。因此,可以合理地假设我在merge jeremy_ab_deletions: Fast-forward 提交上搞砸了……但我无法弄清楚那将是哪个“合并提交”。我试过这个:
$ git revert -m 1 4c431c3
fatal: Mainline was specified but commit 4c431c345dfe0a856967c090932c32f153824085 is not a merge.
我...似乎找不到实际的合并提交?有谁知道我做错了什么:/我现在很迷茫。
【问题讨论】:
标签: git github git-revert git-reflog