Вибирайте та стискайте низку комітів у підкаталог або піддерево


79

Як я можу сказати вишневому сорту вибрати зім'ятий асортимент комітетів?

Або іншими словами, застосувати різницю між двома комітами до поточного стану сховища?

Наступне не працює (вишня не має опції --squash):

git cherry-pick --squash e064480..eab48b59c

Примітка: Мій випадок використання відповідає сценарію піддерева - до того, як хтось почне сперечатися, що я не повинен катитися.

Наступне працює, але тоді у мене є ряд окремих комітів. Пізніше я можу розчавити їх вручну за допомогою інтерактивного перебазування.

git cherry-pick -X subtree=vendor/package e064480..eab48b59c

Чи є якийсь спосіб зробити сквош у складі вишні?

Відповіді:


115

Пропустіть -nдо git cherry-pick. Це буде застосовувати всі коміти, але не фіксувати їх. Тоді просто зробіть, git commitщоб усі зміни здійснити в одному коміті.


2
що робити, якщо в зоні дії вибору, вибраного вишнею, є кілька конфліктів?
Sazzad Hissain Khan

6
@SazzadHissainKhan, хоча я майже впевнений, що це спрацювало б однаково (тобто ви вирішуєте кожен конфлікт, а потім використовуєте git cherry-pick --continue), можливо, найбезпечніше залишити це -nв такому випадку, щоб після завершення операцій ви могли переглянути кожен індивідуально здійснити і підтвердити, що все добре. Потім ви можете їх стиснути за допомогою інтерактивної бази даних.
Девід Дойч

1
У моєму випадку я вже вибрав комміт, і я хотів зім'яти ще один коміт, який виправляє помилку, введену з першим комітом. Оскільки я не вибрав другий коміт, я вибрав його за допомогою -nопції ( --no-commit), потім відредагував перший коміт за допомогою git commit --amend --no-edit(параметр no-edit повторно використовує повідомлення коміту першого коміту, а не запит на новий).
CodeManX

1

git cherry-pick -nДля деяких випадків використання може бути корисною альтернативою проти git merge --squash- наприклад, коли ви хочете протестувати зміни гілки функції поверх вашої гілки інтеграції, без перебазування.

Джерело: Яка різниця між git merge --squash та git cherry-pick?


0

слідуйте від master => cherry pick two commit з іншого відділення

майстер перевірки git - -

git cherry-pick: 1

git cherry-pick: 2

git reset --софт ГОЛОВА ~ 2 (кількість фіксів вишень, тобто 2)

git add.

git коміт

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.