Откат или воссоздание мастер ветки в git? - PullRequest
1 голос
/ 22 апреля 2010

У меня есть git-репо, в котором есть несколько веток - есть ветка master, которая является нашей стабильной рабочей версией, а затем есть ветка разработки / промежуточной разработки, в которой мы делаем новую работу.

К сожалению, может показаться, что, не задумываясь, я немного переусердствовал в перебазировании и за весь промежуток времени потянул весь промежуточный код в Master (около 80 коммитов ... да, я знаю, глупый, неуклюжий, плохой человек-коди т. д ....).

В связи с этим мне очень трудно вносить незначительные исправления в текущую версию нашего приложения (приложения rails) и вносить изменения, не выполняя также«поставленные» новые функции, которые мы пока не хотим выпускать.

Мне интересно, возможно ли сделать следующее:

  1. Определить последний коммит 'trunk'
  2. Возьмите все коммиты с этого момента и переместите их в отдельную ветвь, более или менее откатывая изменения
  3. Начните использовать ветки, как они были созданы.

К сожалению, я все еще постоянно изучаю git, поэтому я немного озадачен тем, что на самом деле здесь делать.

Кстати, коммиты были переданыудаленный, но я не против повторного нажатия с --force, я единственный, кто нажимает удаленно.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 апреля 2010

Будет проблема публикации (то есть вам придется:

  • принудительная установка нового мастера на вашем пульте
  • общаться с кем-либо, кто уже вытащил из этого пульта, чтобы они могли сбросить свой мастер на удаленный )

если ваша ситуация:

m1-m2-m3-m4-s1-s2-s3-s4 (master,stage)

то есть, если ваш текущий мастер на самом деле является также ветвью текущего этапа, необходимо выполнить простой сброс (как упоминает knittl в его ответе )

Но если ваша ситуация такова:

m1-m2-m3-m4-s1-s2-s3-s4-m5-m6 (master)
                       \
                        -s5-s6 (stage)

как в: «Я интегрировал сцену в мастера, а затем продолжаю работать над мастером!»
тогда rebase --onto в порядке:

git checkout master
git reset --HARD m4
git rebase --onto master s4 m6

вы получите:

m1-m2-m3-m4-m5'-m6' (master)
           \
            -s1-s2-s3-s4-s5-s6 (stage)
0 голосов
/ 22 апреля 2010

вы уже отправили свой коммит в удаленный репозиторий? если у вас нет, вы можете просто использовать git reset <commit> (обязательно прочитайте man-страницу раньше, перезагрузка может быть опасной и запутанной)

...