нельзя использовать git rebase -i - PullRequest
1 голос
/ 22 февраля 2012

На вопрос: Как я могу удалить коммит на 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 голосов
/ 22 апреля 2013

Если вы просто хотите изменить коммит, на который указывает ветка, вам нужно сбросить его.

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.

Важно

Если вы решили отменить коммит слияния, будьте в курсе того, что на самом деле происходит. Если вы хотите повторно представить изменения от отмененных слияний, вам нужно будет отменить отмененные коммиты. Прочтите этот ответ от меня на другой вопрос о возврате и слиянии коммитов.

0 голосов
/ 22 февраля 2012

Если ваш пример «желаемого результата» на самом деле точен, наберите git reset --hard 30735f3d4884c4156a070f75dbc5ae3608f9c312, и вы на месте.

...