git rebase с использованием sourcetree

83

Я думаю, что не понимаю, как использовать графический интерфейс SourceTree для git rebase. У меня две ветки «master» и «dev». Как видно, две ветви разошлись. Я хочу выполнить перебазирование ветки "dev", используя командную строку, это будет:

git checkout dev
git rebase master

введите описание изображения здесь

Я ожидал, что щелкну правой кнопкой мыши «dev» и выберу «Rebase current changes to dev». Я предполагаю, что текущие изменения означают «новые коммиты на мастере». Но выбор этой опции, похоже, не имеет никакого эффекта. Какие были бы правильные шаги?

python152
источник

Ответы:

119

Но выбор этой опции, похоже, не имеет никакого эффекта.

Да, потому что текущие изменения - это одна из текущих веток, а именно dev.

Ребазинг devповерх devозначает запрет на выполнение операций .

git checkout dev
git rebase master

Это означает: текущая ветка dev: должна быть перебазирована поверх master.

Итак, в SourceTree вам нужно щелкнуть правой кнопкой мыши master(пока выделено dev) и выбрать:

Rebase current changes onto master

Хоу добавляет в комментариях :

Текущее название " rebase current changes onto [branch]" вводит в заблуждение. Посмотрите это обсуждение улучшенияSRCTREE-1578 .

Обнаружив себя сбитым с толку попыткой обновить ветку функций с разработкой и потерпев неудачу, я пришел к выводу, что элемент контекстного меню на левой панели, помеченный « rebase current changes onto $somebranch», на самом деле делает противоположное тому, что предполагает его название:
он перемещает текущую ветку. до состояния $ somebranch;
Другими словами, он перемещается $somebranchв текущую ветку (или в нее ), а не наоборот. (Правильно?)

Предлог « onto» в текущем тексте вводит в заблуждение; это означает, что объект предложения ( $somebranchв моем примере) получит изменения.
На самом деле произойдет обратное.
Отсутствие названия текущей ветки добавляет путаницы.

Изменение формулировки, улучшающее структуру предложения и включающее имя затронутой ветки, принесло бы огромную пользу для ясности.
Например:

rebase $currentbranch to head of $somebranch
rebase $somebranch onto $currentbranch
VonC
источник
13
Для контекста, отрицательный голос исходит от мертвого человека, который опубликовал ответ ранее, вообще не обращаясь к SourceTree. Я проголосовал против и объяснил свою критику в комментарии. Судя по всему, покойник не оценил мои конструктивные замечания.
VonC
1
Это изменит главную ветку? Я просто хотел бы обновить свою ветку разработчика последними изменениями основной ветки, а затем объединить мою ветку разработчика с веткой master. Будет ли описанный способ решить эту задачу?
Gerfried
2
@Gerfried Согласен. Пока dev не был отправлен, вы можете выполнить переустановку поверх master.
VonC
14
Sourcetree следует изменить формулировку на «Перебазировать последние изменения с Master на Dev» для лучшего понимания.
Timo
4
Текущее название «перенести текущие изменения в [ветвь]» вводит в заблуждение. Ознакомьтесь с этим обсуждением улучшения: jira.atlassian.com/browse/SRCTREE-1578 .
Zihao Zhao 08