Я новичок в социальном кодировании github, и у меня возникают проблемы с соблюдением рекомендаций github. Я постараюсь описать, что произошло и чего я пытаюсь достичь — надеясь, что более опытные мастера git помогут мне разобраться с аркадными командами, необходимыми для этого.
- Исходный проект: https://github.com/phatboyg/MassTransit.
- Моя вилка: https://github.com/davidcie/MassTransit
- Платформа: Windows с Github для Windows + PowerShell.
Что случилось
- Я разветвил MassTransit еще в июле 2012 года. Тогда его ветка master имела версию 2.1.1, последняя фиксация была 29 марта 2012 г..
- Следуя совету github, я начал кодировать некоторые изменения в тематической ветке.
- Спустя несколько коммитов, когда функция была завершена, я объединил свою тематическую ветку с локальным мастером моего клона, а затем отправил ее на github.
- Начиная с 29 марта 2012 г. MassTransit разрабатывался в ветке develop. Все эти изменения, составляющие версию 2.6.0, были недавно объединены с ее мастером.
Что я хотел бы сделать
Я хочу получить все изменения, которые были объединены в upstream/master. Предпочтительно в виде их соответствующих коммитов, а не одного массивного коммита из сотен файлов. Поскольку я занимался разработкой на бывшем upstream/master (от 29 марта 2012 г.), я думаю, мне нужно будет вставить некоторые коммиты между последними upstream /master изменение от 29 марта и мой первый коммит от 8 августа, а затем поверх этого добавить те, что произошли позже. Как это сделать?
(Я также хотел бы не уничтожать свои коммиты/форки в процессе ;-)
Что я пробовал
git checkout master
git remote add upstream git://github.com/phatboyg/MassTransit.git
git rebase upstream/master
git push
Однако это не позволило мне сделать git push
, жалуясь, что моя локальная подсказка отставала от источника на 10 коммитов (возможно, коммитов, которые я сделал в своей тематической ветке, а затем объединил в origin/master?).
Рекомендации?
Кажется, меня укусили рекомендации. Например. возможно, было бы лучше создать отдельную ветку, например. local-master, и относитесь к этому как... ну, к моему собственному хозяину. Тогда master будет использоваться только для поддержания связи с upstream/master, и я буду время от времени перебазировать origin/master с помощью upstream/ master и объединиться с origin/local-master...
Как вы, ребята, управляете своими вилками?
Другие вопросы
Мне не удалось найти способ визуализировать историю веток, узнать, какая ветка была объединена с другой, когда и т. д. Github для Windows показывает только плоскую историю для текущей выбранной ветки (здесь грустное лицо). На веб-сайте есть несколько визуализаций для сети (вот одна для MassTransit), но это кажется гораздо менее информативным, чем, скажем, графики в TortoiseHg. Я упускаю что-то очевидное? Все остальные просто помнят, что с чем было объединено и когда?
Изменить (31 августа)
Я делюсь визуализацией бедняка, чтобы объяснить, что произошло. .
- Я создал ответвление, когда C1 был последним на upstream/master.
- Затем я разработал свой origin/feature-1.
- Когда функция была завершена, я объединил ее с моим origin/master.
- Когда upstream/mega-feature была завершена, она была объединена с upstream/master, фактически исторически скопировав C2 и C3 в upstream/master. (Или, возможно, upstream/master был перебазирован с upstream/mega-feature?)
- Теперь я хочу скопировать C2, C3 и C4 в мой origin/master.