Git stash pop - требуется слияние, невозможно обновить индекс

116

Я не могу открыть свой тайник, потому что я объединил ветку, которая явно конфликтует с моим тайником, и теперь мой тайник, по-видимому, не может быть извлечен.

app.coffee: needs merge
unable to refresh index

Кто-нибудь знает, как это решить?

ФИКСИРОВАННЫЙ!

Оказывается, на самом деле проблема заключалась в неразрешенном конфликте слияния из-за слияния, а НЕ в том, что тайник может вызвать конфликт слияния.

Решение: зафиксируйте конфликтующий файл.

RandallB
источник
6
Интересно, что принятый ответ сложен, в то время как реальное решение довольно простое: вам не нужно даже фиксировать конфликтующий файл, а добавлять его.
Javi V
3
Добавьте свой ответ как ответ не в вопросе.
Блэк

Ответы:

67

Сначала проверьте git status.
Как упоминается в OP,

Фактическая проблема заключалась в неразрешенном конфликте слияния из-за слияния, а НЕ в том, что тайник вызовет конфликт слияния.

Здесь git statusможно упомянуть этот файл как " both modified"

Решение: зафиксируйте конфликтующий файл.


Вы можете найти аналогичную ситуацию 4 дня назад во время написания этого ответа (13 марта 2012 г.) с этим сообщением: « 'Вытягивание невозможно, потому что у вас есть не объединенные файлы' »:

julita@yulys:~/GNOME/baobab/help/C$ git stash pop
help/C/scan-remote.page: needs merge
unable to refresh index

Что вы сделали, так это исправили конфликт слияния (отредактировали нужный файл и зафиксировали его):
см. « Как исправить конфликты слияния в Git? »

Автор сообщения в блоге сделал следующее:

julita@yulys:~/GNOME/baobab/help/C$ git reset --hard origin/mallard-documentation
HEAD is now at ff2e1e2 Add more steps for optional information for scanning.

Т.е. полное прерывание текущего слияния, позволяющее git stash popприменить.
См. « Прерывание слияния в Git ».

Это два ваших варианта.

VonC
источник
1
Иногда бывает, что мы находимся в другой ветке. Например, у меня есть ветка A, я внес некоторые изменения и переключился на ветку B, внес изменения и зафиксировал их. Теперь я хочу перейти в ветку A, но забыл оформить заказ на A и попытаться применить тайник. В этом случае также возникает такая же проблема. Я столкнулся с этой проблемой в приведенном выше случае.
Капил Верма
Я совершил все, но «git bash pop» возвращает эти конфликты. Я не понимаю, почему мне все равно нужно делать коммит, если я не хочу вносить изменения в текущий бах. Я просто хочу вернуться к спрятанной ветке.
Филип Рего
@PhilipRego git bash pop? или git stash pop? Попробуйте проверить тайник вместо использования git stash: stackoverflow.com/a/16625128/6309
VonC
"Извините" означает "git stash pop". Я уже сбросил тайник, но попробую в следующий раз, когда у меня возникнет эта проблема. Спасибо
Филип Рего
14

У меня возникла эта проблема, затем я разрешил конфликт и совершил фиксацию, и git stash popснова я снова восстановил тот же тайник (вызывая тот же конфликт :-().

Что мне нужно было сделать (ВНИМАНИЕ: сначала сделайте резервную копию вашего тайника), git stash dropчтобы избавиться от него.

knocte
источник
4
Это только что избавило меня от моего заначки. Я хотел вернуться к этому.
Филип Рего
3
Это ответ, который мне нужен, но для других людей, которые это увидят, вы потеряете свои спрятанные изменения. Это полезно, если у вас проблемы с первым тайником, но вы действительно хотите избавиться от первого тайника, чтобы применить ваши более глубокие изменения второго уровня.
Кори
9

Это намного проще, чем принятый ответ. Тебе надо:

  1. Проверьте git statusи не объединенные пути под ним. Устраните конфликты. Вы можете пропустить этот шаг, если захотите сделать это позже.

  2. Добавьте все эти файлы по несмешанным путям для индексации с помощью git add <filename>.

  3. А теперь сделай git stash pop. Если возникнут какие-либо конфликты, их снова нужно будет разрешить.

ayushgp
источник
6
Это снова и снова приводит к одному и тому же конфликту.
NaN
7

Вот как я решил проблему:

  • git status (см. набор файлов из предыдущего тайника, извлечение, извлечение тайника и продолжение работы.)
  • git stash (см. проблему слияния потребностей)
  • git add. (добавьте файлы, чтобы моя работа локально разрешила мое собственное слияние)
  • git stash (без ошибок)
  • git pull (без ошибок)
  • git stash pop (без ошибок и продолжайте работу)
Адам
источник
1
Спасибо ! это поможет мне.
Жюльен Болди
1
Отлично, git add .без совершения исправлений для меня проблема.
Пол Карлтон,
5

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

git reset
     fatal: Unable to create '/PATH_TO_PROJECT/.git/index.lock': File exists.
rm -f /PATH_TO_PROJECT/.git/index.lock
git reset
git stash pop
StevieJayCee
источник
1
Вроде боялся resetкоманды. Не могли бы вы объяснить, почему это сработает?
SMBiggs
1

Я обнаружил, что лучшее решение - разветвить свой тайник и затем решить проблему.

git stash branch <branch-name>

если вы очистите свой тайник, вы можете потерять свои изменения, и вам придется вернуться к рефлогу.

Джулиан Теллез
источник
1

Вам нужно добавить app.coffeeв постановку.

Сделайте, git add app.coffeeи тогда вы сможете применить свой тайник (после этого коммита и нажатия).

edvard_munch
источник
0

Тайник уже применен к другим файлам.

Просто app.coffeeнужно вручную слить. Потом просто беги

git сбросить

чтобы отключить изменения и продолжить взлом.

Винодагуда Патил
источник
0

Я столкнулся с той же проблемой, потому что я внес некоторые изменения в свою ветку разработки, а затем хочу перейти в ветку профиля. так что я спрятал изменения

git stash

затем в ветке профиля я также внес некоторые изменения, а затем снова хочу вернуться к разработке, поэтому мне нужно снова спрятать изменения,

 git stash

но когда я пришел к разработке ветки и попытался внести изменения в тайник с помощью

git stash apply

поэтому я получал ошибку, нужно слияние

чтобы решить эту проблему, мне нужно сначала проверить список тайников

git stash list

поэтому он показывает список тайников, в моем случае было 2 тайника, имена тайников отображаются как этот тайник @ {0}, тайник @ {1}

Мне нужны изменения из stash @ {1}, поэтому, когда я пытаюсь получить их с помощью этой команды

git stash apply stash@{1}

так что возникла ошибка, требуется слияние

так что теперь, чтобы решить эту проблему, проверьте статус ваших файлов

git status

поэтому он давал ошибку, что "оба изменены", чтобы решить этот прогон

git add .

он добавит отсутствующие измененные файлы, теперь снова проверьте статус

git status 

так что теперь ошибки нет, теперь можно применить тайник

git stash apply stash@{1}

вы можете проделать этот процесс для любого количества файлов тайника.

Мудасир Хан
источник