git - застосувати коміт з іншої гілки до робочої копії


82

тому у мене є коміт, який має корисну зміну коду, але в іншій гілці.

Я хотів би застосувати цей коміт в іншій гілці до моєї робочої копії в моїй поточній гілці (не як інший коміт).

Чи можливо це? Як би я це зробив?

Думав, що я поділюсь цим, це пов'язано з моїм попереднім запитанням, але стосується робочої копії: git cherry, вибираючи один коміт в іншу гілку


Відповіді:


138

Як додати бажані коміти у різні гілки.

git cherry-pick <SHA-1>...<SHA-1> --no-commit

Застосуйте зміну, введену комітами, на кінчику головного гілки та створіть нові коміти з цією зміною.

Синтаксис ...діапазону комітів. захопити всі коміти від початку (виключити) до останнього. Якщо ви хочете одного коміту, використовуйте один SHA-1

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


cherry-pick без комітування

За замовчуванням git cherry-pick фіксують ваші зміни, тому, якщо ви хочете вибирати вишню без фіксації всіх змін, просто додайте-n прапор

Це дозволить вам переглянути зміни та здійснити їх вручну, якщо хочете, або скасувати їх, якщо у вас виникне занадто багато конфліктів.

git cherry-pick -n <hash>

cherry-pick коміт злиття

Якщо вам потрібно було вибрати злиття замість коміту, використовуйте -mпрапор

#
# In this case, we select the [1] first parent in the commit
# Use git show <hash> to see a list of available parents
# 
git cherry-pick -m 1 <hash> 

Прочитайте повну git cherry-pickдокументацію щодо всіх варіантів, якими ви можете скористатися


3
Дякую! Як для чіткого та добре відформатованого тексту, так і для чарівної схеми. Якщо ви
напишете

1
У запитанні прямо згадується "не як черговий коміт", тоді як у вашій відповіді прямо зазначено "створити новий коміт із цією зміною". Чого мені не вистачає?
amn

3
вам не вистачає прапора без фіксації
CodeWizard

Це навіть працює для віддалених комітів, доки місцеве сховище знає про них (виконайте git fetch remoteоновлення)
sberder

24

Ви все ще можете використовувати git cherry-pickкоманду. Дивіться git cherry-pick --help:

   -n, --no-commit
       Usually the command automatically creates a sequence of
       commits. This flag applies the changes necessary to
       cherry-pick each named commit to your working tree and the
       index, without making any commit. In addition, when this
       option is used, your index does not have to match the HEAD
       commit. The cherry-pick is done against the beginning state
       of your index.

Таким чином, ви можете просто git cherry-pick -n <commitid>, і зміни будуть застосовані до вашого робочого каталогу та розміщені в індексі (наприклад, git -a), але не будуть здійснені.


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