как использовать переоснову мерзавца для чистки замысловатой истории

После работы в течение нескольких недель с полдюжиной различными ответвлениями и слияниями, на обоих моих ноутбуках и работе и моем рабочем столе дома, моя история стала немного замысловатой. Например, я просто сделал выборку, затем объединенное ведущее устройство с источником/ведущим устройством. Теперь, когда я делаю выставочные ответвления мерзавца, вывод похож на это:

! [login] Changed domain name.
 ! [master] Merge remote branch 'origin/master'
  ! [migrate-1.9] Migrating to 1.9.1 on Heroku
   ! [rebase-master] Merge remote branch 'origin/master'
----
 - - [master] Merge remote branch 'origin/master'
 + + [master^2] A bit of re-arranging and cleanup.
 - - [master^2^] Merge branch 'rpx-login'
 + + [master^2^^2] Commented out some debug logging.
 + + [master^2^^2^] Monkey-patched Rack::Request#ip
 + + [master^2^^2~2] dump each request to log
....

Я хотел бы очистить это с перебазой мерзавцев. Я создал новое ответвление, переосновное ведущее устройство, с этой целью, и на этом ответвлении попробовало перебазу мерзавцев <общий предок>. Однако я должен разрешить много конфликтов, и конечный результат на переосновном ведущем устройстве ответвления больше не соответствует соответствующей версии на ведущем устройстве, которое было уже протестировано и работы!

Я думал, что видел решение этого где-нибудь, но не могу больше находить его. Кто-либо знает, как сделать это? Или будут они замысловатые касательно имен уходят, когда я начинаю удалять ненужные ответвления, с которыми я уже объединился?

Я - единственный разработчик на этом проекте, таким образом, нет никого больше, кто будет затронут.

8
задан Lawrence I. Siden 11 June 2010 в 21:00
поделиться

2 ответа

Обычный процесс для репозиториев, где вы можете принудительно проталкивать ветку (заменяя удалённую историю новой, созданной локально с помощью rebase), заключается в следующем:

git rebase --interactive

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

Из сессии rebase вы можете обрезать Git-коммиты и squash history, чтобы получить ту историю, которая вам нужна.

6
ответ дан 5 December 2019 в 08:50
поделиться

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

Рабочий процесс выглядит следующим образом.

$ git checkout -b foobranch
<do stuff>
$ git commit
<do stuff>
$ git commit
...

Когда пришло время интегрировать ветку в мастер, не объединяйте ее. Вместо этого переустановите эту ветку относительно мастера. Это сделает ветку больше не похожей на ветку, а просто больше роста на вершине дерева. Вы разрешаете любые конфликты слияния во время перебазирования.

$ git fetch origin
$ git rebase origin/master

Теперь слейте ветку с мастером. Это будет быстрое слияние.

$ git checkout master
$ git merge foobranch

А теперь продвиньте работу вверх по течению.

$ git push
13
ответ дан 5 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: