我有一些混乱的git仓库,希望能够整理。
在我的本地机器、bitbucket上以及除一台生产机器外的所有机器上,我的历史记录如下:
(本地和bitbucket)
* 1a84374 (HEAD, master) message
*
*
|\
| *
| *
* |
* | ea2d82c message
|/
* ccd87f7 message
*
*
最近出现了一个问题,我不得不ssh到我的一台生产机器上,并快速编写代码。想象一下非常紧急的情况。我猜可能是因为我匆忙,我必须在那个repo中弄错了什么。我记得做了一些rebase操作,我猜那就是错误所在的地方。无论如何,我把我的新代码保存到了一个新的分支中。在这台生产机器上,历史记录突然变成了这样:
* db19412 (HEAD, quickfix) message
* 57f8865 (origin/master, master) Merge branch 'master' of https://bitbucket.org etc etc
|\
| * 1a84374 message
| *
| *
| |\
| | *
| | *
| * |
| * | ea2d82c message
| |/
* | 39052e5 Merge branch 'master' of https://bitbucket.org etc etc
|\ \
| |/
| * ccd87f7 message
* |
您会注意到,现在有一条额外的线连接新提交和一些旧提交。我想我在rebase时可能犯了一些错误。我想摆脱它,但我仍然想保留我添加的新代码(在quickfix分支中),并最终将其推送到bitbucket。也就是说,提交db19412应该直接连接到1a84374。
那么,我如何摆脱这条只是让仓库过于复杂的额外线路呢?
编辑:因为这个问题涉及到撤销某些操作,所以我正在尝试这种方法。我尝试过的其中一件事是经典的“撤销上一个提交”。我把自己放在57f8865上,并使用命令git reset --hard HEAD~1,希望至少可以将master带回1a84374。这是结果历史记录:
* db19412 (quickfix) message
* 57f8865 (origin/master) Merge branch 'master' of https://bitbucket.org etc etc
|\
| * 1a84374 message
| *
| *
| |\
| | *
| | *
| * |
| * | ea2d82c message
| |/
* | 39052e5 (HEAD, master) Merge branch 'master' of https://bitbucket.org etc etc
|\ \
| |/
| * ccd87f7 message
* |
我完全迷失了。
编辑2:我想我可以把quickfix中的更改复制粘贴到我的本地机器上的新分支中,将其推送到bitbucket,然后在生产机器上nuke出现问题的repo,然后从bitbucket克隆一个新的。但是这样我就什么也没学到 :D
git checkout 1a84374
命令即可。 - Bryce Drew