Git говорит мне тянуть, а затем совершать, а затем тянуть?

Я пытаюсь внести новые изменения, но у меня есть конфликтный файл. После попытки нажать, я получаю следующую ошибку:

Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Итак, нам нужно использовать git pull. Я пытаюсь использовать git pull, а затем получаю эту ошибку:

error: Your local changes to the following files would be overwritten by merge:
    db/profile_edit.php
Please, commit your changes or stash them before you can merge.

Но когда я пытаюсь зафиксировать, я возвращаюсь к первой ошибке. Что мне делать? Изменения в удаленном репо являются более новыми, чем те, что находятся на моей локальной машине. Итак, как я могу открыть его с помощью инструмента diff и внести изменения, а затем сообщить git, что я внес изменения, чтобы он мог менять изменения?

Ответ 1

Попробуйте сделать

$ git pull --rebase

Чтобы вытащить удаленные изменения перед вашим, а затем совершить. И посмотрите, работает ли он.

Если это не сработает, попробуйте это вместо:

$ git stash
$ git pull --rebase
$ git stash pop

Чтобы сохранить изменения в stash, примените удаленные коммиты внутри своего рабочего репозитория, а затем снова примените свои изменения (сохраненные в stash) в вашем рабочем репозитории.

Ответ 2

Во-первых, я думаю, что если бы вы были git add, тогда git commit, ваше местное репо было бы достаточно чистым, чтобы сделать git pull.

Однако, если могут быть изменения, которые вы не хотите совершать, пока не увидите, что произошло в восходящем направлении, вы можете использовать git stash. Он временно очистит ваш рабочий каталог и сохранит ваши изменения, поэтому вы можете потянуть (я бы порекомендовал git pull --rebase избегать точек слияния), но это проблема личного вкуса. После того, как вы измените настройки восходящего потока, вы можете вернуть свои локальные изменения с помощью git stash pop. После того, как вы очистите конфликты и избавитесь от ненужных изменений, вы можете добавить, зафиксировать, а затем, наконец, нажать.

Ответ 3

Вы путаетесь с командами.

git commit сохраняет изменения в базе данных git git pull приносит удаленные коммиты в ваше репо

Вы пытаетесь тянуть с незафиксированными изменениями, поэтому git просит вас зафиксировать тех, кто сначала (или git stash их), чтобы он мог объедините свои локальные изменения с удаленными.