intocode / git-faq

Частые вопросы по Git при работе в команде

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Частые вопросы по Git при работе в команде

Дисклеймер

На этой странице даются решения, которые подходят в большинстве случаев командной разработки. Однако, нужно учитывать, что в твоей команде может быть принят другой подход и некоторые решения для тебя могут оказаться неправильными.

Ознакомься с различными рабочими процессами при работе с git, чтобы лучше понимать идею конкретных дающихся решений.

Вопросы

Должен ли я добавлять package-lock.json в свой коммит?

Случай 1

Если твоя работа была связана с добавлением/удалением/обновлением зависимостей, тогда да. Нужно добавить в коммит файлы package.json и package-lock.json.

Случай 2

Допустим, ты не изменял зависимости, а просто установил их командой npm install, но файл package-lock.json все равно модифицировался. Такое может произойти, если файл package-lock.json из репозитория "запаздывает" от установленных ранее зависимостей.

В таком случае лучше закоммитить package-lock.json отдельным коммитом, обновить его в репозитории и уведомить об этом других участников разработки.

Я сделал Pull Request. В нём не было конфликтов, но спустя время они появились. Почему?

Конфликт появился потому что после открытия твоего PR на удаленной ветке произошли изменения. К примеру был принят другой PR, затрагивающий тот же самый файл.

Мой коммит попал в репозиторий, но в нем ошибка. Как его удалить?

На практике не рекомендуется удалять коммит, который был выгружен и стал доступен другим участникам разработки. Это создает больше проблем, чем решает. Самое лучшее в данном случае – это выгрузить новый коммит с исправлениями. Данный совет актуален практически всегда.

Если по какой-то причине коммит все же нужно удалить, то ищи ответ в этом вопросе на Stackoverflow.

Как исправить конфликты в моём Pull Request?

Случай 1. Рабочий процесс без форка

Допустим, что твоя ветка называлась feature и ты делаешь Pull Request на ветку main. Удаленный репозиторий называется origin. В этом случае общий алгоритм решения конфликта будет таким:

Убедись, что рабочая директория чистая:

git status

Состояние не должно иметь модифицированные или новые файлы.

Переключись на ветку, на которую делаешь Pull Request:

git switch main

Стяни последние изменения этой ветки с удаленного репозитория:

git pull origin main

Сделай слияние ветки main на свою ветку feature:

git switch feature
git merge main

Процесс слияния остановится с уведомлением о конфликте. Открой в редакторе файлы, в которых есть конфликт и исправь их.

Сделай новый коммит, добавив в индекс исправленный файлы:

git add файл1 файл2 файл3
git commit -m "Разрешен конфликт слияния между main и feature"

Осталось запушить новый коммит на ветку feature:

git push origin feature

Случай 2. Рабочий професс с форком

В этом случае все предыдущие шаги актуальны, кроме стягивания изменения. Главный репозиторий будет называться иначе, чем origin (например upstream).

Стянуть обновления можно будет так:

git pull upstream main

Если забыл точное название главного репозитория, то узнать о нем можно командой

git remote -v

В последний коммит попали ненужные файлы. Как удалить?

Находясь на той же ветке, с которого делал коммит выполни следующую команду

git reset --soft HEAD~1

Эта команда вернет состояние рабочей директории на момент, который был перед самым последним коммитом.

Набери команду git status для просмотра текущего состояния. Все файлы, которые были закомичены в последнем коммите должны находиться в режиме staged (будут зеленого цвета).

Убери ненужные файлы из staged следующей командой:

git restore --staged путь-к-файлу

Сделай коммит заново (текст коммита также придется повторить).

Если с текущей ветки ранее был открыт pull request, то исправления нужно выгрузить с флагом -f, например:

git push origin my-branch -f

Как я могу посмотреть весь список своих коммитов?

git log --author="твой никнейм"

Команда покажет все коммиты автора на текущей ветке.

About

Частые вопросы по Git при работе в команде