Git удалил некоторые файлы при слиянии

У меня есть несколько важных файлов, которые были удалены при разрешении конфликтов git и выполнении слияний git. Когда я говорю «удалены», я имею в виду, что они все еще существуют в более раннем коммите, но их изменения были перезаписаны в более поздних коммитах. На картинке ниже представлена ​​визуализация моего репозитория git, любезно предоставленного SourceTree.

Визуализация моих веток git

Файлы, которые я хочу сохранить, были удалены после фиксации git, обведенной КРАСНЫМ. Коммиты, содержащие удаленные файлы, находятся в средней ветви РОЗОВОГО цвета (между синим и зеленым кругами), а фиксация, обведенная ЗЕЛЕНЫМ, — это когда ветвь, обведенная розовым цветом, впервые объединилась с ветвью в крайнем левом углу.

Вот вопросы, на которые я хочу знать ответ:

  1. Почему эти файлы, добавленные в РОЗОВЫЕ коммиты, были удалены в коммите, обведенном КРАСНЫМ?

  2. Как мне вернуть эти файлы и изменения из коммита чуть ниже коммита, обведенного КРАСНЫМ?


person idungotnosn    schedule 24.06.2015    source источник


Ответы (1)


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

  2. Это сложная часть; Есть несколько способов сделать это, но все они в конечном итоге приведут к тому, что вы вручную выберете некоторые коммиты. Я не вижу, сколько коммитов находится в каждой ветке как выше, так и ниже вашего снимка экрана, поэтому я просто предполагаю, что вы повторно сделаете розовые коммиты. Для каждого розового коммита ABC выполните git cherry-pick ABC. Это повторит эти коммиты в ветке, вернув ваши изменения.

person David Deutsch    schedule 24.06.2015