Ошибка: не может потянуть с rebase: у вас есть неустановленные изменения

Я начал сотрудничать с несколькими друзьями в проекте, и они используют репозиторий heroku git.

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

Я запустил команду git pull --rebase, как указано здесь (это правильный способ сделать это?): https://devcenter.heroku.com/articles/sharing#merging-code-changes

Я получаю следующую ошибку:

$ git pull --rebase
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.

Моя догадка заключается в том, что я испортил код и теперь он хочет, чтобы я либо совершал, либо отбрасывал (это то, что означает stash?) изменения. Это то, что происходит? Если это так, я хотел бы отказаться от любых изменений, которые я мог бы сделать, и просто получить обновленный код из репозитория git.

Любая идея, что я могу сделать?

Ответ 1

Do git status, это покажет вам, какие файлы были изменены. Поскольку вы заявили, что не хотите сохранять изменения, вы можете сделать git checkout -- <file name> или git reset --hard, чтобы избавиться от изменений.

По большей части git расскажет вам, что делать с изменениями. Например, ваше сообщение об ошибке сообщило git stash вашим изменениям. Это было бы, если бы вы хотели сохранить их. После того, как вы потянете, вы сделаете git stash pop, и ваши изменения будут повторно применены.

git status также имеет способ избавиться от изменений в зависимости от того, установлен ли файл для фиксации или нет.

Ответ 2

Вытягивание с помощью rebase является хорошей практикой в ​​целом.

Однако вы не можете этого сделать, если ваш индекс не чист, т.е. вы внесли изменения, которые не были зафиксированы.

Вы можете сделать это, чтобы работать, предполагая, что хотите сохранить свои изменения:

  • запишите свои изменения с помощью: git stash
  • вытащить из мастера с rebase
  • повторно примените изменения, которые вы спрятали в (1), с помощью: git stash apply [email protected]{0} или более простого git stash pop

Ответ 3

Сначала начните с git status

Посмотрите, есть ли какие-либо ожидающие изменения. Чтобы отбросить их, запустите

git reset --hard

Ответ 4

Вы всегда можете сделать

git fetch && git merge --ff-only origin/master

и вы либо получите (a) никаких изменений, если у вас есть незафиксированные изменения, которые конфликтуют с изменениями восходящего потока или (б) тот же эффект, что и stash/pull/apply: rebase, чтобы поместить вас в последние изменения от HEAD и вашего незафиксированные изменения влево как есть.

Ответ 5

Если вы хотите сохранить свои рабочие изменения во время выполнения переустановки, вы можете использовать --autostash. Из документация:

Перед запуском rebase удалите локальные модификации (см. git -stash [1]), если необходимо, и примените тайник, когда сделал.

Например:

git pull --rebase --autostash

Ответ 6

Когда неустановленное изменение происходит из-за того, что git пытается исправить соглашения eol в файле (как всегда в моем случае), никакие блокировки или проверки или сброса не заставят его уйти.

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

git checkout -f anyotherbranchthanthisone
git branch -D thebranchineedtorebase
git checkout thebranchineedtorebase

Voila! Это еще не подвело меня.

Ответ 7

Это работает для меня:

git fetch
git rebase --autostash FETCH_HEAD