Как разрешить ошибку 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:

  1. В Team Explorer перейдите в Настройки. Перейдите в Глобальные настройки, чтобы настроить эту опцию на глобальном уровне; перейдите в Настройки репозитория, чтобы настроить эту опцию на уровне репо.
  2. Установите 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), и я сделал три простых шага, чтобы заставить это работать

  1. Переключился на главную ветку (git checkout master)
  2. Сделал тянуть на мастера (git pull)
  3. Создана новая ветка (git branch C) - обратите внимание, что теперь мы разветвляемся от master
  4. Теперь, когда вы находитесь на ветке C, объединитесь с веткой B (git merge B)
  5. Теперь сделаем push (git push origin C) - работает :)

Теперь вы можете удалить ветку B, а затем переименовать ветку C в ветку B.

Надеюсь это поможет.