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

Как я могу разделить прошлую непродюссированную фиксацию с Sourcetree?

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

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

4b9b3361

Ответ 1

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


Update:

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

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

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

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

  1. Отметьте фиксацию, которую вы хотите разделить, с действием "редактировать".

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

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

SourceTree запускает в фоновом режиме необходимые команды git и останавливается, когда требуется отредактировать фиксацию, помеченную для внесения изменений. Щелкните правой кнопкой мыши родительский элемент текущего HEAD и выберите "Reset (без ветвления, rebasing <branch>) для этой фиксации из контекстного меню, которое появляется (<branch> - это имя ветвь, которую вы проверили, когда вы начали процесс). Он спросит, какой режим использовать для reset; выберите " Смешанный - сохраните рабочую копию, но reset index " в списке" Режим использования "и нажмите " ОК".

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

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

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

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

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

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

  1. Продолжайте rebase с помощью git rebase --continue.

Выберите "Продолжить перезагрузку" из меню "Действия" .

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

Примечания

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

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

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