不能使用git rebase -i

时间:2012-02-21 20:49:47

标签: git git-rebase

问题:How can I remove a commit on GitHub?

我无法在我的项目中使用相同的解决方案。

我想通过命令提交30735f3d:

git rebase -i HEAD~2


*   823da1cf7976466da40a5720191d09b080e046d6 Merge branch 'hotfix#1-issue
|\  
| * 71b732ef9ecbf36153ab2729cc78bc522341399e fixed: changed salary type f
|/  
*   be87e784da99fbad8b575b5433bb33a35954064c Merge branch 'dev'
|\  
| *   90b23296a3a6c2883f2c434947da4896d8afef5c Merge branch 'issue#2240' 
| |\  
|/ /  
| * 947b43b12763acbd0ca2733f0fd88e3882c086ab issue#2240:create user class
|/  
*   30735f3d4884c4156a070f75dbc5ae3608f9c312 Merge branch 'dev'
|\  
| * 88b06701fc4a66511da3096b2383c8c26ea2e203 added field salaryDefault,bo
| * d364b0b381ed099e48b614955996696dbe39bba4 added entity start salary
|/  
*   4de63ced11d978e10f5c81cc23e743fbe06ea9cc Merge branch 'dev'
|\  
| * f16c849b25028a376dbdf03b5d0aaee0b3966d74 setup persistence
|/  
* cb88a650a26905d6a911706bda609162338c57ed init
在变种之后

一些上述承诺仍然存在,例如修复:更改了工资类型f,问题#2240:创建用户类

* 12f20a44e3ea7eaf34ca62fb6a7a51f5729bcba1 fixed: changed salary type from int t
* 947b43b12763acbd0ca2733f0fd88e3882c086ab issue#2240:create user class
*   30735f3d4884c4156a070f75dbc5ae3608f9c312 Merge branch 'dev'
|\  
| * 88b06701fc4a66511da3096b2383c8c26ea2e203 added field salaryDefault,bonus,tax
| * d364b0b381ed099e48b614955996696dbe39bba4 added entity start salary
|/  
*   4de63ced11d978e10f5c81cc23e743fbe06ea9cc Merge branch 'dev'
|\  
| * f16c849b25028a376dbdf03b5d0aaee0b3966d74 setup persistence
|/  
* cb88a650a26905d6a911706bda609162338c57ed init

但我想要一个这样的结果:

*   30735f3d4884c4156a070f75dbc5ae3608f9c312 Merge branch 'dev'
|\  
| * 88b06701fc4a66511da3096b2383c8c26ea2e203 added field salaryDefault,bonus,tax
| * d364b0b381ed099e48b614955996696dbe39bba4 added entity start salary
|/  
*   4de63ced11d978e10f5c81cc23e743fbe06ea9cc Merge branch 'dev'
|\  
| * f16c849b25028a376dbdf03b5d0aaee0b3966d74 setup persistence
|/  
* cb88a650a26905d6a911706bda609162338c57ed init

现在我只有分公司主人。 或者那是关于--no-ff还是别的什么?

2 个答案:

答案 0 :(得分:0)

如果您“想要的结果”的示例实际上是准确的,请git reset --hard 30735f3d4884c4156a070f75dbc5ae3608f9c312并且您就在那里。

答案 1 :(得分:0)

如果您只想更改分支指向的提交,则需要重置。

git reset --hard 30735f3d4884c4156a070f75dbc5ae3608f9c312

但是,与原点相比,这会让你在历史上“落后”。因此,你不能简单地推动。你必须强行推动。

git push -f origin

这个问题就是这个问题。如果其他开发人员在本地拥有此分支的副本,他们每个人都必须点击他。

git fetch
git reset --hard origin/<branch>

如果他们在本地提交他们需要保留的内容会变得复杂,因为上面的命令意味着他们会失去那些。 修改已经与他人分享的历史记录通常是一个坏主意。

或者,如果这是其他开发人员已经与您共享的代码,您可能希望使用`git-revert'来“撤消”所有那些合并提交之后。

git revert 823da1cf7976466da40a5720191d09b080e046d6
git revert be87e784da99fbad8b575b5433bb33a35954064c

这将创建两个“恢复”提交,这将撤消那些合并提交所做的更改。让你的历史看起来像这样。

*   ######################################## Revert be87e78 Merge branch 'dev'
*   ######################################## Revert 823da1c Merge branch 'hotfix#1-issue
*   823da1cf7976466da40a5720191d09b080e046d6 Merge branch 'hotfix#1-issue
|\  
| * 71b732ef9ecbf36153ab2729cc78bc522341399e fixed: changed salary type f
|/  
*   be87e784da99fbad8b575b5433bb33a35954064c Merge branch 'dev'
|\  
| *   90b23296a3a6c2883f2c434947da4896d8afef5c Merge branch 'issue#2240' 
| |\  
|/ /  
| * 947b43b12763acbd0ca2733f0fd88e3882c086ab issue#2240:create user class
|/  
*   30735f3d4884c4156a070f75dbc5ae3608f9c312 Merge branch 'dev'

您可以推送,每个人都可以推送 - 它将与30735f3d4884c4156a070f75dbc5ae3608f9c312中存在的代码状态相同。

重要

如果您选择还原合并提交,请注意实际发生的情况。如果要从还原的合并中重新引入更改,则需要还原还原提交。 Read this answer from me to a different question regarding reverting and merge commits.