Назад

N команд для начинающих, которые нужно знать, чтобы работать с git

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

Для начала определимся. Во-первых, если вы считаете, что git вам не нужен, то вы крупно ошибаетесь. Если вы планируете писать код не один день, даже если вы будете делать это в одиночку, то вам точно нужен git. Во-вторых, не стоит рассматривать эту статью как руководство. Я не буду расписывать подробности каждого ключа и т.п. Все подробности по той или иной команде вы легко сможете найти в поисковике, в том числе на русском. В-третьих, не важно, планируете вы использовать git череж консоль или через интерфейс, принцип остается одинаковым. Приступим.

Начало.

Репозиторий на вашем диске обычно появляется двумя путями. Либо вы его инициализируете сами командой git init, либо же вы его клонируете из удаленного репозитория (например из Github) командой git clone <your remote repo url>.

Same shit, different day

Ваша ежедневная рутина при работе с git - это команды status, add, commit, pull и push. Для начала опеределимся с первыми тремя.

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

# Хотим зафиксировать изменения в file1.txt и file2.json
git add file1.txt file2.json

# Или добавляем все разом
git add .

Остался последний шаг. При помощи комманды git commit -m 'Мой первый коммит' вы создаете коммит. К каждому коммиту прикрепляется сообщение, которое поясняет что за изменения были произведены. В принципе, оно заполняется в свободной форме, но обычно у команд есть свои правила по их оформлению.

Рано или поздно, вы захотите опубликовать свой код в репозитории (своей команды или в открытом виде на github), тогда-то вам и понадобятся команды pull и push. Правда, стоит сказать, что прежде чем публиковать свой код стоит определиться куда он будет отправляться. Если вы клонировали свой репозиторий, то у вас уже есть ссылка на удаленный репозиторий из которого вы получили код. Он обозначется как origin. Если же вы создали репозиторий сами, то вам стоит добавить эту ссылку вручную при помощи команды git remote add origin <my repo url>. В конце концов, вам станут доступны команды pull и push. Первая git pull получает из текущей ветки все коммиты, а вторая git push оправляет в удаленную ветку ваши коммиты.

Стоп! Ветка?

Ветки - это еще одна классная штука git. Предствьте, что вы шли с другом одним путем, след в след, к светлому комунизму, но в какой-то момент он решил, что у него будет чучхе. Вот это и есть ветка. В самом начале, после иницилизации репозитория создаете главная ветка master. Но вы всегда можете пойти другим путем. Для этого вам нужно выполнить git branch chuchkhe. Новая ветка будет иметь все те же коммиты, которые были в master (или в другой ветке, от который вы взяли ветку), но все последующие коммиты из ветки master сюда не попадут. Переключиться из одной ветки в другую можно при помощи команды git checkout <branch-name>. Но обратите внимание! Все незафиксирпованые изменения из текущей ветки будут применены к новой. В случае же, если ваши изменения будут конфликтовать с другой веткой, то переход будет отменен и вам предложат решить что делать с текущими изменениями. В данном случае у вас есть два пути: отменить свои изменения или зафиксировать их. Сбросить свои изменения вы можете командой git checkout -- file1.txt file2.json или же использовать ., тут работает та же логика, как и при add.

Конфликты и методы их решения.

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

<<<<<<< HEAD
    <a href="/my-pics">Мои картинки</a>
=======
    <a href="/my_pics">Мои картинки</a>
>>>>>>> master

Что вам нужно сделать? Просто выбрать тот вариант, который вы считаете правильным и удалить все лишнее. Когда вы разрешите все конфликты, то добавьте те файлы, где были конфликты и сделайте коммит, но в этот раз используйте комануду git commit без агрументов. В таком случае git автоматически создаст сообщение, в тотором будет сказано, что этот коммит содержит решение конфликтов и укажет файлы, в которых эти конфликты были. Такая ситуация, когда изменения конфликтуют, может возникнуть еще в одном случае. Если вы захотите встроить изменения из другой ветки в свою, то вам нужно будет произмести merge. Чтобы его выполнить укажите ветку, из которой вы хотите получить изменения командой git merge <название другой ветки>. После этого git проверит, нет ли конфликтов между вашей и указаной веткой. Если нет, то автоматически создасться merge commit, в противном же случае вы получите сообщение, что есть конфликты. Файлы, в которых есть конфликты вы можете посмотреть при помощи команды git status.

Заключение

Конечно, это далеко не полный список того, что вы можете сделать при помощи git, но владея этим минимумом вы можете уже начать полноценно работать со своим кодом.

componentWillReceiveProps умер! Да здравствует getDerivedStateFromProps!