git: удалить дубликаты коммитов из публичной ветки? - PullRequest
5 голосов
/ 26 апреля 2011

У меня как-то есть несколько дублирующих коммитов в ветке, каждый с одинаковыми изменениями.Это публичная ветка, объединенная из нескольких веток несколькими пользователями.Мне нужно периодически перебазировать эту ветку на основную ветку другого репо, и эти дубликаты делают ее неуклюжей.

Есть ли способ удалить их и отправить их в публичный репо без осложнений для другихпользователи работают с ветки?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

ответвление фильтра в этом случае не является необходимым, IMHO, и, как сказал Джефроми, не усложняя жизнь всем остальным, это невозможно. Первое правило Git - не переписывать опубликованную историю.

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

для этого (представьте, что ветвь проверяется локально, а последнее известное исправное состояние, после которого вы начали получать эти дубликаты, - 20 коммитов назад)

git checkout yourPublicBranch
git rebase -i HEAD~20

Это запустит редактор, в котором вы сможете управлять коммитами. Затем вам нужно будет сохранить файл и выйти для перезагрузки, чтобы начать работать. Это может привести к конфликтам.

0 голосов
/ 27 апреля 2011

Используйте git filter-branch , чтобы переписать историю. Вот хорошее введение из github:

http://help.github.com/removing-sensitive-data/

...