Как разрешить ошибку git: "Обновления были отклонены, потому что конец вашей текущей ветки отстает"
Недавно я начал использовать Git (ранее я использовал subversion, но сейчас я делаю совместную работу над проектом, который использует bitbucket и git).
Все шло хорошо до сегодняшнего дня, когда я обнаружил, что коллега из лучших побуждений внес изменения в Мастера вместо того, чтобы сделать ветку. Это означает, что когда я пытаюсь зафиксировать, я получаю ошибку:
Обновления были отклонены, потому что кончик вашей текущей ветки позади
Я знаю, что это должно быть решено с помощью запроса на повторную синхронизацию, но я не хочу потерять изменения, внесенные локально, и не хочу принудительно фиксировать коммит и стирать изменения, сделанные кем-то другим.,
Какой правильный подход позволяет мне объединить изменения, не теряя ни того, ни другого?
Ответы
Ответ 1
Если вы уже совершили некоторые коммиты, вы можете сделать следующее
git pull --rebase
Это поместит все ваши локальные коммиты поверх новых изменений.
ОЧЕНЬ ОСТОРОЖНО С ЭТОЙ: это, вероятно, перепишет все ваши текущие файлы файлами, так как они находятся во главе ветки в удаленном репо! Если это произойдет, и вы не захотите этого, вы можете UNDO THIS CHANGE с помощью
git rebase --abort
... естественно, вы должны сделать это, прежде чем делать какие-либо новые коммиты!
Ответ 2
Я бы сделал это так:
-
Сформируйте все неустановленные изменения.
git add .
-
Нажмите на изменения.
git stash save
-
Синхронизация с пультом дистанционного управления.
git pull -r
-
Повторите локальные изменения.
git stash pop
или
git stash apply
Ответ 3
У меня была та же проблема. К сожалению, у меня был неправильный уровень каталогов.
Я попытался: git push -u origin master
→ произошла ошибка
Затем я попытался: git pull --rebase
→ все еще была проблема
Наконец, я меняю каталог cd your_directory
Затем я снова попробовал (git push
), и он работает!
Ответ 4
Мне удалось преодолеть эту проблему с помощью следующего изменения Visual Studio 2017:
- В Team Explorer перейдите в Настройки. Перейдите в Глобальные настройки, чтобы настроить эту опцию на глобальном уровне; перейдите в Настройки репозитория, чтобы настроить эту опцию на уровне репо.
- Установите Rebase local branch при вытягивании на нужную настройку (для меня это было True), и выберите Update для сохранения.
См.: https://docs.microsoft.com/en-us/vsts/git/concepts/git-config?view=vsts&tabs=visual-studio#rebase-local-branch-when-pulling
Ответ 5
У меня была та же самая проблема в моей ветки (давайте назовем это веткой B), и я сделал три простых шага, чтобы заставить это работать
- Переключился на главную ветку (git checkout master)
- Сделал тянуть на мастера (git pull)
- Создана новая ветка (git branch C) - обратите внимание, что теперь мы разветвляемся от master
- Теперь, когда вы находитесь на ветке C, объединитесь с веткой B (git merge B)
- Теперь сделаем push (git push origin C) - работает :)
Теперь вы можете удалить ветку B, а затем переименовать ветку C в ветку B.
Надеюсь это поможет.