我有一些非常混乱的git回购,我想得到一些直接的东西.
在我的本地机器,bitbucket以及除一台生产机器之外的所有机器中,我都有以下历史记录:
(本地和bitbucket)
* 1a84374 (HEAD, master) message
*
*
|\
| *
| *
* |
* | ea2d82c message
|/
* ccd87f7 message
*
*
Run Code Online (Sandbox Code Playgroud)
现在最近出现了一个问题,我不得不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
* |
Run Code Online (Sandbox Code Playgroud)
您会注意到现在有一条额外的行连接新提交和一些更旧的提交.我想我一定是犯了一些错误.我想摆脱它,但我仍然想保留我添加的新代码(在分支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
* |
Run Code Online (Sandbox Code Playgroud)
我完全迷失了.
EDIT2:我想我可以做的一件事就是将quickfix中的更改复制到我本地计算机中的新分支,将其推送到bitbucket,然后在该生产计算机上核对已经搞砸的仓库,然后重新克隆来自bitbucket.但后来我什么都学不到:D
git checkout 1a84374
git cherry-pick db19412
Run Code Online (Sandbox Code Playgroud)
这会将您的quickfix添加到您想要的提交的顶部.现在这段历史可以与来自1a84374的其他作品合并.
git checkout -b branch_name,或git push HEAD:remote_branch