Git:解开一个未知的错误

时间:2016-08-02 22:01:02

标签: git

我有一些非常混乱的git回购,我想直截了当。

在我的本地机器,bitbucket以及除一台生产机器之外的所有机器中,我都有以下历史记录:

(本地和bitbucket)

* 1a84374 (HEAD, master) message
* 
* 
|\
| *
| *
* |
* | ea2d82c message
|/
* ccd87f7 message
*
*

最近出现了一个问题,我不得不ssh到我的一台生产机器上并快速编写代码。想象一下非常时间关键的东西。我想因为我很仓促,我一定在那个回购中打破了一些东西。我记得做了一些改变,我猜这是错误的地方。无论如何,我将新代码保存到新分支中。在这台生产机器中,历史现在突然变得像

* 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
* |

你会注意到现在有一​​个额外的行连接新的提交和一些更旧的提交。我想我一定是犯了一些错误。我想摆脱它,但我仍然想保留我添加的新代码(在分支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
* |

我完全失去了。

EDIT2:我想我可以做的一件事就是将quickfix中的更改复制到我本地计算机中的新分支中,将其推送到bitbucket,然后在该生产计算机上查看搞砸的repo,以及他们从bitbucket重新克隆。但后来我什么都学不到:D

1 个答案:

答案 0 :(得分:5)

git checkout 1a84374
git cherry-pick db19412

这会将您的quickfix添加到您想要的提交的顶部。现在这段历史可以与来自1a84374的其他作品合并。

下一步:

  • 将此更改添加到本地分支: git checkout -b branch_name
  • 将此更改推送到远程分支: git push HEAD:remote_branch