Как я могу разделить прошлый необъявленный коммит с Sourcetree?

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

Есть ли способ сделать это с Sourcetree? Или это одно из тех мест, где я должен опускаться до командной строки, чтобы достичь своих целей?

1 ответ

Разделение коммитов из командной строки с помощью интерактивного перебазирования объясняется в git help rebase(ищите "РАЗДЕЛЕНИЕ КОМИТЕТОВ"). Это не команда или опция git; это больше способредактирования коммитов. Вы можете сделать шаги, описанные там, используя SourceTree для Mac. Из вашего вопроса я понимаю, что вы делали интерактивные перебазировки с использованием SourceTree и знакомы с его пользовательским интерфейсом.


Обновить:

Кажется, что мой оригинальный ответ (см. Выше) слишком загадочный. Там нет специальногоgitкоманда для разделения коммитов, и, следовательно,SourceTreeне предоставляет команду или параметр в интерфейсе для этого. Вы должны прочитать и выполнить шаги, описанные в документации, используя графический интерфейс вместо командной строки.

Это шаги (процитированные из документации) и как следовать им, используя Atlassian SourceTree:

  1. Начать интерактивную перебазировку сgit rebase -i <commit>^, где<commit> это коммит, который вы хотите разделить. Фактически, подойдет любой диапазон фиксации, если он содержит этот коммит.

Щелкните правой кнопкой мыши родительский коммит коммита, который вы хотите редактировать. Выберите"Перебазировать детей<hash>интерактивно... " из контекстного меню, которое появляется (<hash> является сокращением хеша нажатого коммита).

  1. Пометьте коммит, который вы хотите разделить, с помощью действия "изменить".

SourceTreeоткрывает диалоговое окно "Интерактивная перебазировка". Определите в списке коммит, который вы хотите разделить (это последний) и отметьте его галочкой в ​​столбце"Amend Commit?", Нажмите кнопку " ОК", чтобы продолжить.

  1. Когда дело доходит до редактирования этого коммита, выполнитеgit reset HEAD^, Эффект заключается в том, чтоHEADперематывается на единицу, а индекс следует примеру. Однако рабочее дерево остается прежним.

SourceTreeработает в фоновом режиме необходимоеGitкоманда (ы) и останавливается, когда дело доходит до редактирования коммита, который вы пометили для внесения изменений. Щелкните правой кнопкой мыши родителя текущегоHEAD и выберите "Сброс" (без ветки, перебазирование <branch>) на этот коммит " из контекстного меню, которое появляется (<branch> это название ветки, которую вы извлекли при запуске процесса). Он спросит, какой режим использовать для сброса; выберите "Mixed - сохранить рабочую копию, но сбросьте индекс" в списке "Using mode" и нажмите "OK".

  1. Теперь добавьте изменения в индекс, которые вы хотите иметь в первом коммите. Ты можешь использовать git add (возможно, в интерактивном режиме) или git gui (или оба), чтобы сделать это.

Это разделенное время! Добавьте в индекс файлы и фрагменты, которые вы хотите поместить в первый коммит; вы даже можете внести изменения, которых не было в исходном коммите, если вам нужно. Однако следует помнить, что изменения, которых не было в редактируемом вами коммите, могут конфликтовать с изменениями, внесенными последующими коммитами.

  1. Зафиксируйте текущий текущий индекс с любым соответствующим сообщением.

использование SourceTree как обычно и внесите поэтапные изменения.

  1. Повторите последние два шага, пока ваше рабочее дерево не станет чистым.

(без комментариев)

  1. Продолжить ребаз с git rebase --continue,

Выберите "Continue Rebase" из меню "Actions".

Поздравляем! Вы просто разделяете коммит, используя скрытую команду "split commit", предоставленную SourceTree:п

замечания

Если что-то пойдет не так, или вы решите или по какой-то причине вам нужно отменить весь процесс, используйте "Abort Rebase" из меню "Actions". На заднем фоне SourceTree вызовет git rebase --abort и все хорошо, вернись в состояние, которое было до того, как ты начал.

Если вам нужно разделить / отредактировать более одного коммита в одной ветви, вы можете использовать самый старый коммит на шаге 1 и пометить для внесения поправок во все коммиты, которые вам нужны на шаге 2. Все остальное - то же самое, SourceTree Повторите шаги 3-7 для каждого коммита, который вы пометили для внесения изменений.

Вот как вы можете разделить коммит, используя Atlassian SourceTree, Любой другой Git вместо него можно использовать клиент с графическим интерфейсом, который предоставляет способ сделать интерактивное перебазирование.

Другие вопросы по тегам