Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: idungotnosnОтветов: 1

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

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

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

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

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

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

gitversion-controlgit-merge

Ответы

Ответ 1 · рейтинг 1 · David Deutsch

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы