Как я могу разделить прошлый необъявленный коммит с Sourcetree?
Возможности Sourcetree в области интерактивной перебазировки великолепны, но я часто хочу иметь возможность разделить коммит на несколько коммитов меньшего размера. Я знаю, что есть способ сделать это из командной строки, но я не могу найти никакого места в пользовательском интерфейсе, чтобы справиться с этим.
Есть ли способ сделать это с Sourcetree? Или это одно из тех мест, где я должен опускаться до командной строки, чтобы достичь своих целей?
1 ответ
Разделение коммитов из командной строки с помощью интерактивного перебазирования объясняется в git help rebase
(ищите "РАЗДЕЛЕНИЕ КОМИТЕТОВ"). Это не команда или опция git; это больше способредактирования коммитов. Вы можете сделать шаги, описанные там, используя SourceTree для Mac. Из вашего вопроса я понимаю, что вы делали интерактивные перебазировки с использованием SourceTree и знакомы с его пользовательским интерфейсом.
Обновить:
Кажется, что мой оригинальный ответ (см. Выше) слишком загадочный. Там нет специальногоgit
команда для разделения коммитов, и, следовательно,SourceTree
не предоставляет команду или параметр в интерфейсе для этого. Вы должны прочитать и выполнить шаги, описанные в документации, используя графический интерфейс вместо командной строки.
Это шаги (процитированные из документации) и как следовать им, используя Atlassian SourceTree
:
- Начать интерактивную перебазировку с
git rebase -i <commit>^
, где<commit>
это коммит, который вы хотите разделить. Фактически, подойдет любой диапазон фиксации, если он содержит этот коммит.
Щелкните правой кнопкой мыши родительский коммит коммита, который вы хотите редактировать. Выберите"Перебазировать детей<hash>
интерактивно... " из контекстного меню, которое появляется (<hash>
является сокращением хеша нажатого коммита).
- Пометьте коммит, который вы хотите разделить, с помощью действия "изменить".
SourceTree
открывает диалоговое окно "Интерактивная перебазировка". Определите в списке коммит, который вы хотите разделить (это последний) и отметьте его галочкой в столбце"Amend Commit?", Нажмите кнопку " ОК", чтобы продолжить.
- Когда дело доходит до редактирования этого коммита, выполните
git reset HEAD^
, Эффект заключается в том, чтоHEAD
перематывается на единицу, а индекс следует примеру. Однако рабочее дерево остается прежним.
SourceTree
работает в фоновом режиме необходимоеGit
команда (ы) и останавливается, когда дело доходит до редактирования коммита, который вы пометили для внесения изменений. Щелкните правой кнопкой мыши родителя текущегоHEAD
и выберите "Сброс" (без ветки, перебазирование <branch>
) на этот коммит " из контекстного меню, которое появляется (<branch>
это название ветки, которую вы извлекли при запуске процесса). Он спросит, какой режим использовать для сброса; выберите "Mixed - сохранить рабочую копию, но сбросьте индекс" в списке "Using mode" и нажмите "OK".
- Теперь добавьте изменения в индекс, которые вы хотите иметь в первом коммите. Ты можешь использовать
git add
(возможно, в интерактивном режиме) илиgit gui
(или оба), чтобы сделать это.
Это разделенное время! Добавьте в индекс файлы и фрагменты, которые вы хотите поместить в первый коммит; вы даже можете внести изменения, которых не было в исходном коммите, если вам нужно. Однако следует помнить, что изменения, которых не было в редактируемом вами коммите, могут конфликтовать с изменениями, внесенными последующими коммитами.
- Зафиксируйте текущий текущий индекс с любым соответствующим сообщением.
использование SourceTree
как обычно и внесите поэтапные изменения.
- Повторите последние два шага, пока ваше рабочее дерево не станет чистым.
(без комментариев)
- Продолжить ребаз с
git rebase --continue
,
Выберите "Continue Rebase" из меню "Actions".
Поздравляем! Вы просто разделяете коммит, используя скрытую команду "split commit", предоставленную SourceTree
:п
замечания
Если что-то пойдет не так, или вы решите или по какой-то причине вам нужно отменить весь процесс, используйте "Abort Rebase" из меню "Actions". На заднем фоне SourceTree
вызовет git rebase --abort
и все хорошо, вернись в состояние, которое было до того, как ты начал.
Если вам нужно разделить / отредактировать более одного коммита в одной ветви, вы можете использовать самый старый коммит на шаге 1 и пометить для внесения поправок во все коммиты, которые вам нужны на шаге 2. Все остальное - то же самое, SourceTree
Повторите шаги 3-7 для каждого коммита, который вы пометили для внесения изменений.
Вот как вы можете разделить коммит, используя Atlassian SourceTree
, Любой другой Git
вместо него можно использовать клиент с графическим интерфейсом, который предоставляет способ сделать интерактивное перебазирование.