2014-10-06 4 views
0

У меня есть репозиторий с неправильным разветвлением. Филиалы использовались как тег для сообщения фиксации, отображающий связанную часть проекта (например, данные, похожие на объекты). Не было слияния. Каждая следующая фиксация, если речь идет о другой функции, чем prev, просто открывает ветвь с желаемым именем.hg: исправление ветвления без слияния

Похоже

o changeset: 717 
| branch:  default 
| 
o changeset: 523 
| branch:  search 
| 
o changeset: 357 
| branch:  data 
| 
o changeset: 397 
| branch:  data 
| 
o changeset: 789 
| branch:  default 

Что правильный способ, чтобы остановить это безобразие?

Обновление каждой ветви головки и слияние с последним фиксацией в результате? Но на самом деле нечего сливать. Или обновить каждую голову, зафиксировать с «закрытой веткой», обновить до следующей главы ... и, наконец, обновить до значения по умолчанию?

ответ

0

Во-первых, как указал Аарон, и предполагая, что это недоразумения со стороны участников, вам нужно будет обучать других, работающих над этим репо, когда это необходимо (по вашему определению) для создания названных ветвей, а когда оно не является «т. Я предполагаю, что это решит большинство ваших проблем.

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

¯hG ветвей

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

Если вы хотите избежать компромиссов с бранами, вы можете посмотреть на использование bookmarks, которые являются своего рода объединением ветвления и пометки.

Если вы хотите минимизировать ветвление (даже анонимное ветвление) на своем репо, вы можете использовать rebase, который является встроенным расширением, которое необходимо включить. Вы можете использовать переключатель переадресации при перетаскивании чужих изменений, чтобы автоматически перемещать свои фиксации после того, как вы совершаете транзакции, и делаете историю линейной. Вы не можете сделать это, как только ваши фиксации уже были вытащены или сдвинуты в другое место (ну, вы, could, но это сделало бы вещи очень сложными в зависимости от того, что происходит с вашими потянутыми фиксациями). Однако использование rebase будет зависеть от того, как вы относитесь к сохранению точной истории.

Для очистки существующего репо может быть немного миссии.Вы можете использовать rebase для перемещения всех коммитов в общую ветку, например по умолчанию, однако, поскольку она изменяет вашу историю, она больше не будет «совместима» с существующими клонами этого репо. Таким образом, вам придется использовать rebase, чтобы изменить вашу историю, а затем заставить всех (включая серверы) отменить измененное репо и удалить старый (они не могут даже вытащить какие-либо выходы из старого в измененное репо).

0

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

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

Что касается «остановки» этого, просто прекратите открывать ветви. Нет ничего, что вам нужно сделать, чтобы «очистить» историю, поскольку на самом деле нет головок, которые нуждаются в слиянии. Поэтому Mercurial скажет вам «ничего не слиться», если вы выберете default и скажите hg merge search.

Смежные вопросы