2016-06-24 3 views
1

У меня есть ветка развития, называемая функцией/многочленностью, которая была отделена от мастера. После того, как моя работа была завершена, я объединил ветвь функции в промежуточную ветку, называемую «промежуточная стадия-объединение», которая также была отделена от мастера. Были конфликты слияния, которые я разрешил, и затем я объединил промежуточную ветку в мастер. Тем не менее, все коммиты, которые я сделал в «feature/multientity», не были объединены. Только одно коммит, то место, где я зафиксировал конфликты слияния, было объединено. Итак, теперь, несмотря на то, что код обновлен, любые будущие слияния «feature/multientity» с мастером будут иметь конфликты слияния, потому что ни одна из транзакций не была перенесена. Кто-нибудь сталкивался с этим вопросом раньше? Я использую SourceTree в качестве инструмента для управления версиями.Все коммиты потеряны при слиянии ветви развития назад к мастеру

+0

Используете ли вы так называемую технику «сквош-слияние»? Если это так, обратите внимание, что слияние сквоша не является слиянием вообще, это всего лишь одно обычное совершение. – torek

+0

Я не сквош слился. Это было простое слияние ветки функций в промежуточную ветвь. –

ответ

0

Не имеет смысла. Когда вы смотрите на объединение слиянием в процесс объединения-многократного слияния, видите ли вы свои изменения в функции/многопользовательской? Если это так, они там. Если нет, вы испортились во время разрешения конфликта слияния и не включили их или не завершили слияние с git add/rm, а затем git commit? То же самое для фиксации слияния в мастер.

+0

Изменения есть, но все они сконденсированы в одно слияние. История фиксации каждого отдельного коммита не существует. Мой процесс был следующим: 1) Оформить заказ «промежуточное слияние-объединение» локально. 2) Потяните «функцию/многомерность» в локальную ветвь и разрешите все конфликты слияния. 3) Зафиксируйте разрешение. 4) Переместите локальную ветвь в удаленную ветку и создайте запрос на растяжение для слияния с мастером. –

+0

А, ладно, вы искали сообщения о фиксации в транзакции слияния? Потому что это не делает по умолчанию. Добавьте флаг -log, чтобы получить это, см. Https://git-scm.com/docs/git-merge. – DavidN

+0

№ После того, как я слился в промежуточную ветку, я сделал «git log», и единственное новое коммитирование, которое я видел, было слияние. Все фиксации из ветки «feature/multientity» не были частью истории филиалов. –

1

Я столкнулся с вашей описанной проблемой, и я использую SourceTree в качестве инструмента визуализации. Я решил проблему, сбросив состояние до слияния и правильно слив. Я, по-видимому, попытался объединить обе ветви, чтобы освоить, где я должен был объединить ветвь функции в промежуточную ветку. Это может произойти, если имена ветвей нетривиальны.

Вы можете попробовать следующие шаги, чтобы объединить свои художественные изменения ветви к промежуточной ветви до слияния всех изменений в мастер:

  1. Checkout функции/multientity
  2. Сброс функции/multientity в состояние перед слиянием, используйте, например, git log --stat, чтобы найти хеш фиксации перед слиянием. Используйте git reset --hard commit_hash_here

  3. Повторите для постановки ветви, сброс промежуточной-multientity-сливаться заявить до слияния совершить

  4. Теперь git checkout staging-multientity-merge первым и использовать команду git merge feature/multientity здесь только после проверки ветви промежуточной. Это приведет к изменениям с функции/многопользовательской функции для промежуточной ветви.

  5. Используйте git status для контроля состояния слияния и устранения любых конфликтов слияния. Commit using git commit -m "Your merge conflict resolution message here." Теперь ваша промежуточная ветка готова к объединению для освоения.

  6. Далее, используйте git checkout master, это то, что я забыл, и завершить работу, используя git merge staging-multientity-merge. Используйте Создайте новый коммит, даже если возможна перемотка вперед. вариант в представлении фиксации SourceTree (в левом нижнем углу), это позволит нескольким ветвям не указывать в одном фиксации в представлении фиксации SourceTree. Использование функции fast-forward здесь действительно создает визуально более приятный внешний вид в представлении истории фиксации SourceTree, на мой взгляд.

Используя этот подход, сброс ветвей может заставить вас принудительно вносить изменения в удаленный репозиторий, но это не обязательно, если вы еще не нажали неудачное слияние на удаленный.

В то время как у меня была проблема с неудачным слиянием, мне было трудно интерпретировать визуальные эффекты инструмента SourceTree для каждой ветви.Цвета произвольны и только там, чтобы помочь вам визуализировать отношение между родителями и дочерними элементами. См. Atlassian Community answer about what SourceTree tool branch colour visuals represent, чтобы узнать больше о SourceTree.

+0

Кроме того, проблема автора может возникнуть, если другой коллега нажал операцию git, названную revert в вашей целевой ветви, и вы слились раньше в целевую ветку. Возврат git merge приведет к тому, что ваша история будет отменена в этом случае. Вы можете исправить это, вернув реверс. Вот отличное письмо, в котором описывается [проблема с возвратом слияния] (https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html). Также вы можете увидеть, как выполнить повторное слияние [здесь] (https://stackoverflow.com/questions/1078146/re-doing-a-reverted-merge-in-git) – Huntha

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