Подтвердить что ты не робот

Как выполнить rebase (squash) с помощью черепахи

Невозможно получить, как выполнить rebash для squash для текущей ветки. Команда консоли будет

git rebase -i HEAD~2

а затем сквош как обычно. Но как сделать то же самое в TGit?

Script, чтобы инициализировать случай

git init .
touch 1
git add 1
git commit -m "1"
touch 2
git add 2
git commit -m "2"
touch 3
git add 3
git commit -m "3"

В результате после раздачи мы будем иметь 1 фиксацию с 3 файлами.

Любые предложения?

4b9b3361

Ответ 1

Не делайте ни одного из предыдущих! Просто объедините 2 фиксации, используя интерфейс. Помните, что вы не комбинируете коммиты уже в режиме общего репо. Видеть: Right click 2 commits

Ответ 2

Это работает для меня, используя TortoiseGit 1.7.12:

  • Щелкните правой кнопкой мыши рабочий каталог, в котором вы хотите выполнить интерактивную переадресацию, и выберите TortoiseGitShow log в контекстном меню.
  • В появившемся диалоговом окне "Журнальные сообщения" щелкните правой кнопкой мыши самую последнюю фиксацию, которую вы бы не хотели бы переустановить и выберите Rebase master onto this... в контекстном меню.
  • В появившемся диалоговом окне "Rebase" отметьте флажок Force Rebase, а затем щелкните правой кнопкой мыши фиксацию, чтобы выбрать между Pick, Squash и т.д., или отметьте флажок Squash ALL в вашем случае.
  • Нажмите кнопку Start Rebase, которая при успешном завершении превратится в кнопку Commit, а затем в кнопку Done. Нажмите все.

Обратите внимание, что в вашем примере script вы должны скворовать/исправлять корневую фиксацию, которая является специальным случаем, и не работает, как описано выше, потому что корень commit не имеет родителя, который вы могли бы выбрать на шаге 2.

Ответ 3

Здесь я использовал Tortoise Git и сохранил репо на Assembla (что, по-видимому, похоже на GitHub).

Я решил, что хочу эффективно удалить всю историю транзакций и начать репо с нуля. Я мог бы удалить локальную папку Git и соответствующее репо в Assembla, а затем воссоздал ее, но подумал, что лучше понять, как это сделать "правильно".

Итак, вот как я это достиг:

1) Используя Tortoise Git, отобразите журнал репозитория. Выделите все коммиты, щелкните их правой кнопкой мыши и выберите "объединить в одну фиксацию".

2) В появившемся диалоговом окне удалите комментарий фиксации (который становится комбинацией всех предыдущих комментариев) и замените его одним комментарием, например. Перебазироваться. Затем инициируйте фиксацию. Местное репо будет эффективно начато с нуля (со всеми файлами, добавленными к нему, конечно) без необходимости его удаления и воссоздания.

3) К сожалению, вы не можете просто нажать на Assembla. Он отвергнет это, настаивая на том, что ваша "голова" находится за удаленной ветвью. Итак, чтобы решить эту проблему, перейдите на страницу "Настройки" для репо в Ассембле. Включить "Разрешить-принудительное нажатие".

4) Теперь выполните "принудительный толчок". Я не знаю, есть ли у Tortoise Git опция gui, но это легко сделать с помощью командной строки:

cd [your repo folder]
git push -f origin

Готово!

UPDATE:

Чтобы "принудительно нажать" с TortoiseGit, в диалоговом окне нажмите флажки, чтобы заставить "известные изменения" и "неизвестные изменения". Я не уверен, в чем разница, но они оба приводят к использованию переключателя Git --force. Попробуйте "известные изменения" для начала.

Ответ 4

Один из способов: перейдите в диалог журнала и выберите "rebase on *", а затем установите флажок "Force" и отметьте фиксации для "squash" (например, набрав "q" ).