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

Сквош в SourceTree

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

4b9b3361

Ответ 1

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

SourceTree для Windows

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

SourceTree для Mac

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

Команда git rebase –interactive позволяет вам реорганизовать свои коммиты после их создания (но прежде, чем вы сделаете их общедоступными), и теперь вы можете сделать это в SourceTree. Комбинация (сквош) несколько коммитов вместе, или переупорядочить их, просто путем перетаскивания. Вы также можете изменить сообщение фиксации или отредактировать содержимое коммитов. Просто щелкните правой кнопкой мыши фиксацию в журнале и выберите "Rebase children of <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.

Ответ 2

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

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

  • Создайте ветку из A и назовите ее C.
  • Reset C в B в режиме мягкий.
  • Отъезд B.
  • Commit.

    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 - ваш друг.

Ответ 3

Щелкните правой кнопкой мыши родительский фиксатор и выберите "Rebase children of interactive". После этого вы сможете перетаскивать и выкапывать, чтобы совершить сквош.

Ответ 4

Старая школа Скриптинг внутри вашей локальной ветки функции

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

Шаг 1

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

Шаг 2

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

Шаг 3

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

Готово!

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

Ответ 5

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

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