Каков наилучший способ вернуть ветку обратно на прежнюю позицию? - PullRequest
0 голосов
/ 01 ноября 2019

  1. Сейчас у нас есть разработка и ветки T (в удаленном хранилище).

  2. Мы хотим переместить разработку в более старую точку (к началу синей линии на изображении выше).

  3. Тогда разные команды будут работать над ветвями разработки и T в течение некоторого времени.

  4. Затем объедините ветвь T для разработки.

Каков наилучший способ сделать выше # 2 (то есть переместить развитие в более старую точку)?

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

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

Так какой же здесь лучший подход?

Ответы [ 3 ]

1 голос
/ 01 ноября 2019

Вероятно, зависит. Защищена ли ветка разработки? Вы упомянули, что «многие разработчики извлекли уроки из этого репо» - даже если вы с трудом переустанавливаете разработку, разработчики просто собираются использовать те же коммиты? Учитывая, что ветвь называется 'Develop' - я предполагаю, что вы следуете gitflow, поэтому разработчикам, вероятно, не следует нажимать непосредственно на эту ветку.

Вот что я, вероятно, сделаю;

git checkout develop
git reset --hard [commit-hash]
git push -f origin/develop

Чтобы мешать разработчикам выдвигать те же коммиты, которые вы могли бы защитить удаленной разработкой, и / или заставить разработчиков делать;

git checkout develop
git checkout -b old_develop # so they don't lose their changes
git reset --hard origin/develop

Если разработчикам необходимо зафиксировать свои изменения разработки в ветви T (или какую-то другую ветку) они могут выбрать их через

[РЕДАКТИРОВАТЬ - на основе дополнительных комментариев ниже]

Как насчет этого

git branch temp HEAD
git reset --soft <commit-hash>
git stash save <name>
git merge temp
git revert --no-edit <commit-hash>..<commit-hash>

В основном создать тайник, использоватьgit revert чтобы вы не выдвигали дополнительные требования ко многим DEV, а затем, когда вы захотите, чтобы все эти коммиты вернулись на каком-то этапе позже, вы можете использовать git stash apply.

0 голосов
/ 01 ноября 2019

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

Однако вам нужно справиться с эффектами перемотки истории: ВыЯ хочу избежать случайного слияния с не перемотанной веткой develop, поскольку это вернет материал T в историю develop. Из-за этого вам необходимо выполнить две вещи:

  • Обычно вам нужно принудительно толкать ветку после перемотки, чтобы также перемотать ветку на сервере.

  • Вы обязательно должны поговорить со своими коллегами-разработчиками, чтобы сообщить им, что у вас есть история перемотки, и что они также должны перемотать свои локальные ветки develop соответственно. Если кто-либо из них уже добавил локальную работу в свою частную ветку develop, эту работу необходимо переместить в ветвь перемотки develop, прежде чем ее можно будет отправить. В противном случае они будут читать историю T в восходящую ветвь develop при нажатии.

Итак, полная последовательность:

#Talk to your peers about what you are going to do.
git checkout T    #get off branch develop
git branch -f develop <old-commit>
git checkout develop
git push -f
#Talk to your peers about what they need to do now,
#and what they must not do.

Выше приведена причина, по которой вам следует воздерживаться от переписывания / перемотки истории. Но иногда это необходимо, и в этом случае, то, что нужно сделать, - выше.

0 голосов
/ 01 ноября 2019

Мой план будет выглядеть примерно так:

  1. Возврат разработки с помощью одного возврата (не связывайтесь с историей)
  2. Создание новой ветви из разработки, T2
  3. Создать возвратный коммит исходного исходного возврата в T2
  4. Завершить работу
  5. Объединить T2 для разработки.

Я думаю, это закончитсяс простой и понятной историей.

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