Git вытащить локальные изменения

Как я могу безопасно обновлять (вытягивать) проект git, сохраняя определенные файлы нетронутыми, даже если есть восходящие изменения?

myrepo/Config/config.php

Есть ли способ, даже если этот файл был изменен на удаленном компьютере, когда я git pull, все остальное обновлено, но этот файл не изменяется (даже не сливается)?

PS. Мне нужно делать то, что я прошу, потому что я пишу только сценарии развертывания на основе git. Я не могу изменить конфигурационные файлы для шаблонов.

поэтому мне нужно написать сценарии обновления, которые не теряют то, что было локально изменено. Я надеялся на что-то простое:

git assume-remote-unchanged file1
git assume-remote-unchanged file2

тогда git pull

Ответ 1

Существует простое решение на основе Git stash. Сбросьте все, что вы изменили, потяните все новые вещи, примените свой кошелек.

git stash
git pull
git stash pop

При появлении стачки могут быть конфликты. В случае, если вы описали, на самом деле был бы конфликт для config.php. Но разрешение конфликта легко, потому что вы знаете, что то, что вы положили в кошельке, - это то, что вы хотите. Так сделайте это:

git checkout --theirs -- config.php

Ответ 2

Если у вас есть файл в вашем репо, который должен быть настроен большинством съемников, переименуйте файл на что-то вроде config.php.template и добавьте config.php к вашему .gitignore.

Ответ 3

Обновление: это буквально отвечает на заданный вопрос, но я думаю, KurzedMetal answer действительно то, что вы хотите.

Предполагая, что:

  • Вы находитесь на ветке master
  • Верхняя ветвь master в origin
  • У вас нет незафиксированных изменений.

.... вы могли бы сделать:

# Do a pull as usual, but don't commit the result:
git pull --no-commit

# Overwrite config/config.php with the version that was there before the merge
# and also stage that version:
git checkout HEAD config/config.php

# Create the commit:
git commit -F .git/MERGE_MSG

Вы можете создать псевдоним для этого, если вам нужно делать это часто. Обратите внимание, что если у вас есть незафиксированные изменения в config/config.php, это отбросит их.

Ответ 4

Мы также можем попробовать git pull with rebase

git pull --rebase origin dev