Git уже актуальная ошибка - PullRequest
0 голосов
/ 28 июня 2018

Допустим, у нас есть интеграция ветвлений, где проверенный код фиксируется, а затем ветвь forTesting для всех новых функций (нестабильная). По какой-то причине в день x forTesting был случайно объединен с интеграцией, и никто об этом не заметил. После этого уже произошло несколько коммитов как в интеграции, так и в ветке forTesting.

Допустим, у нас есть branchFeatureX, который был объединен с веткой forTesting перед случайным слиянием. Теперь, когда мы хотим объединить эту ветку с интеграцией, мы получаем ошибку «Уже обновлено».

Как мы можем решить эту проблему, не потеряв коммитов в ветке интеграции?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Поскольку вы слили ветку featureX в ветку fortesting, а затем слили ветку fortesting в ветку integration, это означает, что изменения из ветви featureX уже введены в ветку integration. Поэтому, когда вы объединяете ветку featureX в ветку fortesting, git покажет Already up-to-date.

А история коммитов на данный момент должна отображаться на графике ниже:

                    ...---A---B---C---K---...---L integration
                                     /
...---C---D---G---H---I---J---...---M---...---N  fortesting
               \         /
                E-------F  featureX

И если вы хотите внести изменения из featureX в ветку integration на основе последней версии integration, вы можете использовать команду:

# On integration branch
git cherry-pick <latest commit from featureX branch>

В качестве команды git cherry-pick <commit F> в приведенном выше примере.

И история коммитов будет выглядеть так (коммит O применяет изменения из featureX ветви к integration ветви):

                    ...---A---B---C---K---...---L---O integration
                                     /
...---C---D---G---H---I---J---...---M---...---N  fortesting
               \         /
                E-------F  featureX
0 голосов
/ 28 июня 2018

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

1) Создайте ветку исправлений из своего мастера и работайте над ней, чтобы быть более безопасной

2) git log, чтобы найти последний хороший коммит перед слиянием, где все пошло не так. Скопируйте или запишите хеш коммита для дальнейшего использования.

3) git reset --hard <commit_hash_you_spotted_as_good>

4) Затем, для каждой функции, разработанной с тех пор, и вы хотите вернуться, давайте рассмотрим две возможности: (в этот момент вы можете посмотреть либо логи, либо графическое представление вашего дерева, но я бы предложил последнее)

а) ветка была создана из мастера ДО того, как все пошло не так:

-> просто объединить эту функцию в ветке исправлений, должно быть довольно просто

b) ветка была создана из уже испорченной версии master

-> git log снова, чтобы отметить каждый коммит в этой ветке и снова выбрать их в ветке исправлений с помощью git cherry-pick <commit_id>

4) протестируйте все в вашей ветке исправлений, чтобы подтвердить, что все в порядке, как вы и хотели

5) затем вернитесь в основную ветку, сбросьте ее до упора, как вы делали для ветви исправлений (та же самая последняя хорошая фиксация), и объедините ветку исправлений в

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