Ошибка Git push «кончик вашей текущей ветки находится за ее удаленным аналогом»

#git #github

#git #github

Вопрос:

Я не знаю, почему я не могу отправить измененный файл в разветвленный репозиторий github.

 $ git checkout -b br_mahmood
Switched to a new branch 'br_mahmood'
$ git status
On branch br_mahmood
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   util/job_launching/stats/example_stats.yml

no changes added to commit (use "git add" and/or "git commit -a")
$ git add util/job_launching/stats/example_stats.yml
$ git commit -S -m "Fixing something"

You need a passphrase to unlock the secret key for
user: "mahmood <EMAIL>"
4096-bit RSA key, ID 162AF377, created 2020-09-17

[br_mahmood 0115ea6] Fixing regex for L2_BW
 1 file changed, 1 insertion( ), 1 deletion(-)
$ git push -u origin br_mahmood
To https://github.com/MY_NAME/REPO
 ! [rejected]        br_mahmood -> br_mahmood (non-fast-forward)
error: failed to push some refs to 'https://github.com/MY_NAME/REPO'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  

Запустив git push , я даже ввел имя пользователя и пароль. Однако я не знаю, почему возникает эта ошибка.

Ответ №1:

Из журнала ошибок мы видим, что в удаленном репозитории уже есть ветка с именем br_mahmood . В то время небезопасно создавать локальную br_mahmood из head с помощью git checkout -b br_mahmood . Если этот заголовок принадлежит другой ветке, которая расходится с удаленной br_mahmood , локальное br_mahmood отображение выполняется неправильно. Лучшей практикой является создание br_mahmood из обновленного origin/br_mahmood :

 git fetch origin br_mahmood
git checkout -b br_mahmood origin/br_mahmood
  

Команды все еще могут вызывать ошибку, если некоторые значения конфигурации установлены неправильно. Чтобы избежать этой ошибки:

 git fetch origin br_mahmood
git checkout -b br_mahmood FETCH_HEAD
  

Чтобы устранить ошибку в журнале, мы могли бы использовать git pull origin br_mahmood или git pull -r origin br_mahmood перед следующим нажатием. Но, если вы создали локальную br_mahmood из неправильного коммита в начале, это может привести к смешиванию двух ветвей, чего не должно быть.

Чтобы исправить ошибку в вашем случае, безопасное решение:

 # reset the local "br_mahmood" to the head of the remote "br_mahmood"
git fetch origin br_mahmood
git reset FETCH_HEAD --hard

# apply the commit "0115ea6" onto to the updated "br_mahmood"
git cherry-pick 0115ea6 

# update "br_mahmood" to avoid the "non-fast-forward" push error,
# in case the remote "br_mahmood" has been updated by others
git pull origin -r br_mahmood

# push again
git push origin -u br_mahmood