Ребята, я учусь на первом курсе колледжа информатики и новичок в программировании и git. Я работаю над школьным проектом вместе с тремя другими людьми.
Я попытался просмотреть несколько руководств по git, но они довольно длинные и содержат слишком много деталей. Я хотел бы спросить вас, ребята, о минимальном наборе команд git, чтобы я мог начать работу над проектом.
Вот что я знаю на данный момент о том, как начать работу над проектом
git clone
git checkout -b <newBranch>
git add .
и если он готов к фиксации, я git commit
тогда наконец git push
Итак, вот мой первый вопрос, если предположить, что я продолжаю работать над той же функцией, т. Е. Я остаюсь в той же ветке, следующим коммитом должно быть git commit —amend
или все же git commit
? Я понимаю, что git commit —amend
позволяет комбинировать поэтапные изменения с предыдущим коммитом вместо создания совершенно нового коммита. Поэтому я не уверен, что эти два коммита связаны с реализацией одной и той же функции, должен ли я их объединять или нет?
И если кто-то из моей команды внес некоторые изменения в репозиторий, мне нужно синхронизировать мой локальный мастер с удаленным мастером, я провел некоторое исследование и знаю, что, вероятно, есть два способа сделать это.
Один из подходов
git checkout master
для переключения на основную веткуgit pull
чтобы получить последний кодgit branch -b <newBranch>
создать ветку, отслеживающую мастера для работыТогда другой подход
git fetch
git checkout master
git reset —hard origin/master
git branch -b <newBranch>
Итак, вот мой второй вопрос: верны ли эти два подхода и одинаковы ли они? Итак, вы, ребята, можете предложить какой-нибудь другой подход для синхронизации моего локального мастера с удаленным мастером?
Объявление 1: Оба подхода возможны, это зависит от практики, которую предпочитает команда, с которой вы работаете. Некоторые команды предпочитают одну фиксацию для каждой функции, некоторые команды предпочитают небольшие коммиты, каждая из которых представляет собой отдельный логический шаг к реализации функции.
Объявление 2: я не понимаю, как последний шаг в обоих подходах связан с обновлением основной ветки. git pull
это git fetch
+ git merge
, но возможно и reset --hard
- но обязательно проверьте, нет ли изменений в вашей рабочей копии, иначе они будут полностью потеряны. После того, как мастер синхронизирован, можно git rebase
все ветки функций, которые еще не были отправлены, включить в них новый мастер.
Я лишь упомяну несколько моментов, которые могут быть вам полезны. Что я обычно делаю во время работы над функцией, так это то, что я создаю несколько коммитов, а затем позже я давить их с помощью интерактивной перебазировки. Интерактивная перебазировка — довольно полезная команда, которая может делать множество вещей, таких как изменение порядка коммитов, изменение сообщений коммитов и многое другое.
Еще одна команда, которая может вам пригодиться, это git reflog
. Вы можете использовать рефлог, чтобы вернуться к определенному состоянию вашего проекта, если вы запутались.
В git есть несколько способов сделать одно и то же. Я использую следующий набор команд для синхронизации моего репо:
git fetch origin master
git rebase origin/master
При использовании rebase
вы должны убедиться, что ваш рабочий каталог чист. И иногда вы можете столкнуться с конфликтами слияния при использовании rebase
, которые вам придется разрешать. Есть и другие способы синхронизации локального репозитория, но я обычно использую метод, упомянутый выше.