#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