Можно ли выкачать в SourceTree? Я видел, что, по-видимому, вы можете "перетащить", чтобы их сквош. Однако, когда я делаю это, он выделяет только несколько коммитов.
Сквош в SourceTree
Ответ 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
Ответ 6
Они просто добавили поддержку "squash" в версию Windows.