Назад

January 3, 2025

🙈 Як змусити Git ігнорувати локальні зміни в файлах, які вже відстежуються

Іноді вам може знадобитися змінити відстежуваний файл, щоб запустити проєкт локально на своїй машині. Таке трапляється зазвичай із файлами конфігурацій та шаблонів. Але ви не хочете комітити ці файли. Один із варіантів — щоразу відкидати ці зміни перед комітом і знову повторювати їх після pull із master. Інший варіант — «ховати» їх у стеш (stash) перед комітом і застосовувати стеш, коли ви робите pull.

Однак є простіший спосіб! Ви можете вказати Git ігнорувати зміни в цьому файлі:

git update-index --assume-unchanged <file-to-ignore>

Тепер ви можете робити з цим файлом все що завгодно, і він не відображатиметься як змінений у Git.

Це працюватиме доти, доки цей файл не змінять у віддаленій гілці. Якщо так станеться, і ви виконаєте git pull, з’явиться помилка.

Коли таке трапляється, вам потрібно сказати Git, що файл знову слід відстежувати, сховати ваші зміни, зробити pull, застосувати свої приховані зміни й знову сказати Git ігнорувати цей файл:

# сказати Git знову відстежувати цей файл
git update-index --no-assume-unchanged <file-to-ignore>

# сховати ваші локальні зміни в стеш
git stash <file-to-ignore>

# отримати зміни з віддаленого репозиторію
git pull

# застосувати ваші приховані зміни та розв’язати можливі конфлікти
git stash apply

# тепер знову сказати Git ігнорувати цей файл
git update-index --assume-unchanged <file-to-ignore>

Усе це можна автоматизувати, створивши або Bash-скрипт, або Git-псевдонім, що виконуватиме всі зазначені кроки разом. Детально про обидва варіанти читайте в цій статті.