git cherry-pick не працює


110

Я намагаюсь вибирати комісію у майстра і вносити його в поточну галузь виробництва. Однак, коли я виконую git cherry-pick <SHA-hash>, я просто отримую це повідомлення:

# On branch prod_20110801
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#   site/test-result/
 nothing added to commit but untracked files present (use "git add" to track)
 The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

Примітка. Я намагався зробити скидання та скидання - тверда голова ^, і ніби жодне не змінило нічого.

Я розгублений, чому це не працює для мене.

Будь-яке розуміння, поради чи ідеї щодо вирішення цього питання допоможе ~!


Це сталося зі мною, коли я випадково спробував вибрати вишневе неправильне місце. Трапляється іноді при використанні gitk.
cst1992

Відповіді:


141

Git вирішує вибір вишні як не-оп - всі зміни, внесені цим комітом, внесені деякими комісіями у вашій нинішній філії. (Або так думає Git у будь-якому разі.) Переконайтесь, що комітет, який ви збираєте вишню, вже не був об'єднаний якось, як належне злиття, перезавантаження / вишня вибору або шматок. (Використовуйте git show <commit-id>для перегляду різниці.)


16
Дякую за вашу пораду, виявляється, вишня вже відбулася, і мені все потрібно було підштовхнути її до github.
Джей Тейлор

Правильно, я не усвідомлював, що це перевірка вмісту файлів, що даються ідентифікатор комісії. Я пішов шукати ідентифікатор фіксації у журналі та не зміг його знайти. виявилося, що це вже було об'єднано.
mparaz

На жаль, це не єдина причина, про яку йдеться. У мене точно така ж ситуація, коли я взяв на себе зобов’язання, яке повертає якусь попередню фіксацію, і коли я вишнево вибрав її на іншій гілці, історія якої не мала, щоб зміни були повернені (тобто, не було вишні вибору цього поверненого коміта ). Звичайно, це моя вина. Але в цьому випадку очікується, що git повинен не мати статусу конфлікту, а не намагатися бути занадто розумним, що призводить до заплутаності користувача.
Артем Писаренко

Це може статися, якщо ви скасуєте команду злиття, а зобов'язання, яке потрібно вибрати вишневим, знаходиться на поверненій гілці.
мат

11

У моєму випадку це призвело до того, що я зріс, оскільки було цілком очевидним, що конкретна фіксація, яку я хотів зробити вишневою, не була об'єднана в мою нинішню галузь.

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

Перевірте файли (файли), які ви намагаєтеся вибрати. Якщо вони вже мають зміни, версія комітету вже була вибрана або додана іншим чином. Таким чином, немає потреби вишні вибирати її знову.


Я майже впевнений, що конкретна комісія ніколи не є у вашій галузі, коли її принесла вишня, тому що вишня буде новим хешем, правда? Або я нерозумію?
msouth

@msouth Те, що я спочатку відбирав у інших відповідей, - це "фіксація вже об'єднана", але я міг бачити, що це не було в моєму відділенні. Ти маєш рацію щодо вишню, яка завжди є новою SHA.
pkamb

Так, я думав, що "конкретна фіксація, визначена хешем", коли я це вводив. Моя мова була неточною. Я часто оглядаюсь за результатами, git log --graph --pretty --decorate --onelineщоб побачити, чи є дана SHA у моїй галузі чи ні. Дивіться мою відповідь нижче про те, як ви також можете змішатись на основі думки, що повідомлення про вчинення свідчить про зміни - є ситуація, коли її немає, і саме це спонукало мене до цього питання спочатку. Мозок людини схильний робити ці ярлики, і вони можуть час від часу повертатися, щоб вкусити вас.
msouth

6

Також зауважте, що додавання порожнього файлу (наприклад .gitkeep) до дерева вишневим вибору розглядається як порожнє фіксування.


У моєму випадку я мав повернути команду повернення (тобто це було поверненням порожнього комітету) перед моєю спробу вибору вишні, тому я здогадуюсь, що будь-яке порожнє-іш, ймовірно, призведе до появи цього повідомлення.
lidkxx

3

Отже, ось ще одна заплутана ситуація, коли це може виникнути: у мене було таке:

скріншот журналу git

Я намагався вибрати вишню 9a7b12e, що, мабуть, нічого - він навіть намагався сказати мені на цьому рядку у виведенні журналу git, що 4497428 - це те, що я дуже хотів. (Що я зробив, просто шукав повідомлення про фіксацію і схопив перший хеш, який я побачив, що в ньому було). У будь-якому випадку, просто бажаючи повідомити людям, що існує інший спосіб, як можна натрапити на спробу вишеньки вибрати не оп.


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