Сквош в SourceTree

Можно ли сквошировать в SourceTree? Я видел, что, по-видимому, вы можете «перетаскивать» коммиты, чтобы раздавить их. Однако, когда я это делаю, он выделяет только несколько коммитов.


person Miles    schedule 21.08.2013    source источник


Ответы (6)


Обновленный ответ

Исходное дерево для Windows

Начиная с версии 1.5 теперь вы можете делать интерактивные перебазировки, которые позволят вам раздавить.

Исходное дерево для Mac

Интерактивная перебазировка доступна в SourceTree для Mac с версия 1.6 (выделено мной):

Команда git rebase –interactive позволяет вам реорганизовать ваши коммиты после того, как вы их создали (но до того, как вы сделали их общедоступными), и теперь вы можете сделать это внутри SourceTree. Объединяйте (склеивайте) несколько коммитов вместе или меняйте их порядок, просто перетаскивая мышью. Вы также можете изменить сообщение фиксации или отредактировать содержимое коммитов. Просто щелкните правой кнопкой мыши фиксацию в журнале и выберите «Перебазировать дочерние элементы <sha> в интерактивном режиме», чтобы начать процесс.

Старый ответ

По-видимому, раздавливание коммитов — это функция SourceTree версии 1.6. для Mac.

Однако эта функция, похоже, недоступна в версии SourceTree для Windows, которая в настоящее время все еще имеет версию 1.0.8.

Использование командной строки

У вас все еще есть возможность использовать командную строку для сквоша коммитов:

git rebase -i <sha-of-base-commit>

В списке TODO поставьте s (для сквоша) рядом с фиксациями для сквоша в предыдущую фиксацию:

pick e953225 Add meow meow meow
s def892d Add master

Чтобы узнать больше о том, как удалять коммиты с помощью командной строки, см. Squashing Commits из БЕСПЛАТНОЙ онлайн-книги Pro Git.

person Community    schedule 21.08.2013
comment
Отказ от ответственности: это может работать нормально, только если вы попробуете до того, как сделаете их общедоступными. Я уже отправил предыдущее изменение в remote, затем отменил его локально и получил ошибку при попытке push изменить его в remote. Поскольку мне не нужны старые изменения, я исправил с помощью CLI git push --force origin e3f1e37:master из /git-how-to-reset-origin-master-to-a-commit - person Ricardo; 15.01.2016
comment
@Ricardo - Однако вы должны быть чрезвычайно осторожны с принудительным нажатием и изменением уже общедоступной истории, поскольку вы рискуете привести к тому, что другие, которые работают поверх ваших старых коммитов, потеряют свою работу. - person JimmidyJoo; 16.03.2017

Щелкните правой кнопкой мыши родительский коммит и выберите «Интерактивно перебазировать дочерние элементы ‹sha›». После этого вы сможете перетаскивать коммиты.

https://community.atlassian.com/t5/Sourcetree-questions/In-SourceTree-how-do-I-squash-commits/qaq-p/345666#M10317

person alvarodoune    schedule 16.07.2014

Начиная с версии 1.4.1.0, у пользователей Windows по-прежнему нет сквоша. Тем не менее, вы можете получить тот же результат вручную.

Чтобы раздавить ветку A в ветку B:

  1. Создайте ветку от A и назовите ее C.
  2. Сбросить C на B в программном режиме.
  3. Проверьте Б.
  4. Совершить.

    1.              2.                          3.                             4.
        * <- [A][C]    * <- [A]                    * <- [A]                       * <- [A]
        |              |                           |                              |
        *              * o <- [C] with changes     * o <- [C][B] with changes     * * <- [C][B] committed
        |              |/                          |/                             |/
        * <- [B]       * <- [B]                    *                              *
        |              |                           |                              |
        :              :                           :                              :
    

Вам не нужно создавать C, если вам не нужно сохранять позицию A.

Я рекомендую открывать gitk в стороне, пока вы делаете это, потому что вы можете видеть все отсоединенные коммиты, пока не закроете. (Я бы хотел увидеть эту щедрость в SourceTree)

По крайней мере, reflog — ваш друг.

person snipsnipsnip    schedule 06.12.2013

Чтобы раздавить ваши последние коммиты, если вы хотите последние 10 коммитов

1) git reset HEAD~10
2) git add .
3) git commit -am "single commit message for 10 last changes"
4) git push --force
person sasikumar    schedule 18.09.2019

Старая школа сквоша в вашей собственной локальной ветке

Этот ответ работает с большинством версий Sourcetree на любой платформе, потому что я использую только старые функции. Это довольно просто, если подумать. Как обычно, это работает только до публикации вашей работы. Я использую его для создания «аккуратных» коммитов в общем репозитории, а также часто делаю коммиты в своем собственном локальном репозитории. Предположим, вы находитесь в местном отделении myfeature. Предположим, вы на несколько коммитов опередили ветку origin/myfeature. Вы можете оставаться в филиале myfeature на протяжении всей процедуры, поэтому вы не будете влиять на чью-либо работу.

Шаг 1

Сделайте «сбросить текущую ветку до этого коммита» в последнем опубликованном коммите. Это коммит с пометкой origin/myfeature. Смешанный сброс сохранит все ваши изменения. Обязательно проверьте, что ваш сброс смешанный. (Если вы непреднамеренно сделаете полную перезагрузку, вы потеряете свою работу...)

Шаг 2

Внесите изменения (как обычно). Не забудьте файлы, которые вы добавили или удалили по пути!

Шаг 3

Совершить. Напишите хорошее сообщение о коммите, обобщающее все ваши собственные (локальные) сообщения о коммите, потому что они потеряны.

Сделанный!

Вы все удалили и очистили свои локальные коммиты на шаге 1. Вы все еще находитесь в своей собственной функциональной ветке, поэтому вы не повлияли ни на что другое. Если вы чувствуете себя неуверенно, пометьте свой последний коммит, прежде чем делать что-либо еще. Просто для сохранности. Таким образом, вы всегда можете выполнить жесткий сброс на этот ярлык, если что-то пойдет не так. Если все получится, просто удалите этот ярлык, чтобы очистить историю коммитов.

person Stef Joosten    schedule 02.05.2017

Они только что добавили поддержку «сквоша» и в версии для Windows.

SourceTree версии 1.2 для Windows

person mjlee    schedule 23.09.2013
comment
Я не вижу части примечаний к выпуску 1.2, в которой упоминается поддержка сквоша. - person Todd Bowles; 13.12.2013