На этот вопрос ответили с другой стороны здесь . Но мой вопрос касается попыток понять, почему эта проблема возникает в первую очередь. Я сталкивался с этой проблемой на работе, и предлагаемое решение не слишком удовлетворяет, поскольку оно не решает саму проблему и рискует потерять коммиты.
Ниже вы найдете самую короткую последовательность взаимодействия git, которую я нашел, чтобы воспроизвести ошибку:
git clone git@github.com:joyofdata/test3.git
cd test3
echo "1" > m
git add .
git commit -m "m1"
git push origin master
git checkout -b feature
git push -u origin feature
echo "1" > f
git add .
git commit -m "f1"
git rebase master
git push origin feature
git checkout master
echo "2" >> m
git add .
git commit -m "m2"
git push origin master
git checkout feature
echo "2" >> f
git add .
git commit -m "f2"
git rebase master
git push origin feature (error - see next code box)
Я просто создаю версию файла m в master, а затем файл f в функции , затем я фиксирую изменение в мастере, затем я фиксирую изменение в функции. Теперь, перед тем как отправить изменения в удаленную ветвь функций, я хочу перебазировать их на master.
Это команда и сообщение об ошибке последней команды в приведенном выше списке:
➜ test3 git:(feature) git push origin feature
To github.com:joyofdata/test3.git
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to 'git@github.com:joyofdata/test3.git'
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.
Now - Я пытаюсь решить проблему, сначала вытягивая из удаленной функции (как предложено в сообщении), затем я разрешаю конфликт, pu sh для функции:
➜ test3 git:(feature) git pull origin feature
From github.com:joyofdata/test3
* branch feature -> FETCH_HEAD
Auto-merging f
CONFLICT (add/add): Merge conflict in f
Automatic merge failed; fix conflicts and then commit the result.
➜ test3 git:(feature) ✗ vim f
➜ test3 git:(feature) ✗ git add .
➜ test3 git:(feature) git commit -m "deconflicted"
[feature 3fb647e] deconflicted
➜ test3 git:(feature) git push origin
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 565 bytes | 565.00 KiB/s, done.
Total 5 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To github.com:joyofdata/test3.git
0f31f60..3fb647e feature -> feature
Но - отныне - I ' Я собираюсь снова и снова запускать эту ошибку каждый раз, когда перебрасываю функцию на master - снова конфликт слияния и снова эту ошибку.
➜ test3 git:(feature) git rebase master
First, rewinding head to replay your work on top of it...
Applying: f1
Applying: f1
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: f2
➜ test3 git:(feature) git push origin
To github.com:joyofdata/test3.git
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to 'git@github.com:joyofdata/test3.git'
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 мастер перебазирования
- git pu sh исходная функция
I простые термины - перед нажатием коммита на удаленную функцию я хочу перебазировать функцию на мастер. Если я объединю мастер с функцией (git pull origin master
или git merge master
, если локальный мастер обновлен), я не столкнусь с этой проблемой.
Надеюсь, это не слишком запутанно, но я не не знаю, как это проще сказать, и это меня очень раздражает.