Ось усі команди Git, якими я користувався минулого тижня, і що вони роблять.

Кредит зображення: GitHub Octodex

Як і більшість новачків, я почав шукати StackOverflow для Git-команд, потім копіював відповіді, не розуміючи, що вони робили.

Кредит зображення: XKCD

Я пам’ятаю, що думав: «Чи не було б добре, якби був список найпоширеніших команд Git разом із поясненням, чому вони корисні?»

Ну, ось я через роки складаю такий список і викладаю кілька найкращих практик, які навіть середньо-просунуті розробники повинні вважати корисними.

Щоб зробити практичні речі, я грунтую цей список на фактичних командах Git, якими я користувався за останній тиждень.

Практично кожен розробник використовує Git і, швидше за все, GitHub. Але середній розробник, ймовірно, використовує лише ці три команди 99% часу:

git add - всі
git commit -am "<повідомлення>"
git push master master

Це все добре і добре, коли ви працюєте над командою для однієї людини, хакафоном чи додатком для викидання, але коли стабільність і обслуговування починають ставати пріоритетним, прибирання комісій, дотримання стратегії розгалуження та написання когерентні повідомлення про фіксацію набувають важливого значення.

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

Регулярно використовуються команди

Щоб ініціалізувати Git у сховищі (repo), потрібно просто ввести наступну команду. Якщо ви не ініціалізуєте Git, ви не можете запускати будь-які інші команди Git у межах цього репо.

git init

Якщо ви використовуєте GitHub і натискаєте код на репортаж GitHub, який зберігається в Інтернеті, ви використовуєте віддалене репо. Ім’я за замовчуванням (також відоме як псевдонім) для цього віддаленого репо-файлу. Якщо ви скопіювали проект із Github, він уже має вихід. Ви можете переглянути це походження за допомогою команди git remote -v, яка відобразить URL-адресу віддаленого репо.

Якщо ви ініціалізували своє власне репортаж Git і хочете пов’язати його з репортажем GitHub, вам доведеться створити його на GitHub, скопіювати надану URL-адресу та скористатися командою git remote add origin з URL-адресою, наданою GitHub замінивши "". Звідти ви можете додавати, виконувати та натискати на віддалений репо.

Останній використовується тоді, коли потрібно змінити віддалений сховище. Скажімо, ви скопіювали репортаж від когось іншого і хочете змінити віддалене сховище від початкового власника на власний обліковий запис GitHub. Виконайте той самий процес, що і git remote add origin, за винятком використання set-url замість того, щоб змінити віддалене репо.

git віддалений -v
git remote add origin 
git віддалений набір URL-адреси 

Найпоширеніший спосіб копіювання репо - використання git-клону, за яким слідує URL-адреса репо.

Майте на увазі, що віддалене сховище буде пов’язане з обліковим записом, з якого ви клонували репо. Отже, якщо ви клонували репо, що належить комусь іншому, ви не зможете натиснути на GitHub, поки ви не зміните походження за допомогою команд, наведених вище.

клон git 

Ви швидко знайдете себе за допомогою гілок. Якщо ви не розумієте, що таке гілки, є інші навчальні посібники, які є набагато більш поглибленими, і ви повинні прочитати їх, перш ніж продовжувати (ось ця).

Команда git гілка перераховує всі гілки на вашій локальній машині. Якщо ви хочете створити нову гілку, ви можете скористатися гіткою git <ім'я>, при цьому <ім'я> відображатиме назву гілки, наприклад "master".

Команда git checkout <ім'я> переходить на існуючу гілку. Ви також можете скористатися командою git checkout -b , щоб створити нову гілку та негайно перейти до неї. Більшість людей використовують це замість окремих команд відділення та реєстрації.

гіт гілка
git гілка <ім'я>
git checkout <ім'я>
git checkout -b <ім'я>

Якщо ви внесли купу змін у гілку, давайте назвемо її "розвивати", і ви хочете об'єднати цю гілку у свою головну гілку, ви використовуєте команду git merge . Ви хочете перевірити головну гілку, а потім запустити git merge development, щоб об'єднатися, перетворитись у головну гілку.

git merge 

Якщо ви працюєте з кількома людьми, ви опинитеся в положенні, коли репо було оновлено на GitHub, але ви не маєте змін на місцевому рівні. Якщо це так, ви можете використовувати git pull origin , щоб витягнути останні зміни з цієї віддаленої гілки.

git pull origin 

Якщо вам цікаво побачити, які файли були змінені та що відстежуються, ви можете скористатися статусом git. Якщо ви хочете побачити, наскільки змінено кожен файл, ви можете використовувати git diff, щоб побачити кількість рядків, змінених у кожному файлі.

git статус
git diff --stat

Розширені команди та кращі практики

Незабаром ви досягнете точки, коли хочете, щоб ваші зобов'язання виглядали приємно і залишалися послідовними. Можливо, вам також доведеться поспішати з історією ваших зобов’язань, щоб зробити ваші зобов’язання легшими для розуміння або повернути випадкову помилку.

Команда git log дозволяє переглядати історію фіксації. Ви хочете скористатися цим, щоб переглянути історію ваших комітетів.

У ваші зобов’язання надходитимуть повідомлення та хеш, який є випадковим рядом цифр і букв. Приклад хешу може виглядати так: c3d882aa1aa4e3d5f18b3890132670fbeac912f7

git журнал

Скажімо, ви натиснули щось, що зламало ваш додаток. Замість того, щоб виправити це і натиснути щось нове, краще просто повернутись на одну команду і спробувати ще раз.

Якщо ви хочете повернутись у часі і оформити свій додаток з попереднього комітету, ви можете це зробити безпосередньо, використовуючи хеш як назва філії. Це від’єднає ваш додаток від поточної версії (адже ви редагуєте історичний запис, а не поточну версію).

git checkout c3d88eaa1aa4e4d5f

Потім, якщо ви внесете зміни в цю історичну гілку і хочете знову натиснути, вам доведеться зробити натиск.

Обережно: натискання на примусові сили небезпечно, і їх слід робити лише в тому випадку, якщо ви абсолютно зобов'язані. Це переписує історію вашої програми, і ви втратите все, що сталося після.

git push -f походження майстер

В інших випадках просто не практично тримати все в одному комітеті. Можливо, ви хочете зберегти свій прогрес, перш ніж спробувати щось потенційно ризикове, або, можливо, ви допустили помилку і хочете пощадити себе від збентеження помилки в історії своєї версії. Для цього у нас є git rebase.

Скажімо, у вашій місцевій історії є 4 коміти (не натиснуті на GitHub), які ви переходили вперед і назад. Ваші зобов'язання виглядають неохайно і нерішуче. Ви можете використовувати rebase, щоб об'єднати всі ці комісії в один, стислий документ.

git rebase -i HEAD ~ 4

Наведена вище команда відкриє редактор за замовчуванням на вашому комп’ютері (який є Vim, якщо ви не встановите його на щось інше), з декількома варіантами того, як ви можете змінити свої зобов’язання. Це буде виглядати приблизно як код нижче:

виберіть 130deo9 найстарішого повідомлення про фіксацію
виберіть 4209fei друге найстаріше повідомлення про фіксацію
виберіть 4390гр
виберіть bmo0dne останнє повідомлення фіксації

Для того, щоб поєднати їх, нам потрібно змінити параметр "вибору" на "виправлення" (як зазначено в документації, наведеному нижче коду) для усунення комітетів та відхилення повідомлень про фіксацію. Зауважте, що в vim вам потрібно натиснути “a” або “i”, щоб можна було редагувати текст, а для збереження та виходу потрібно ввести клавішу “escape” з наступним “shift + z + z”. Не питайте мене, чому це просто так.

виберіть 130deo9 найстарішого повідомлення про фіксацію
fixup 4209fei друге найстаріше повідомлення з фіксацією
fixup 4390gne третій найстаріший повідомлення фіксації
fixup bmo0dne нове повідомлення про фіксацію

Це об'єднає всі ваші зобов'язання в комісію з повідомленням "найстаріше повідомлення про здійснення".

Наступним кроком є ​​перейменування повідомлення про фіксацію. Це повністю питання думки, але поки ви дотримуєтесь послідовної схеми, все, що ви робите, - це добре. Я рекомендую використовувати вказівки щодо виконання зобов'язань, викладені Google для Angular.js.

Щоб змінити повідомлення про фіксацію, використовуйте прапор зміни.

git commit --імен

Це також відкриє vim, і правила редагування та збереження тексту такі ж, як вище. Щоб навести приклад хорошого повідомлення про виконання зобов’язань, ось наступне:

feat: додати кнопку оплати смуги на сторінку платежів
- додати кнопку перевірки смуги
- написати тести для оформлення замовлення

Однією з переваг дотримання типів, перелічених у керівництві, є те, що це спрощує написання журналів змін. Ви також можете включити інформацію у нижній колонтитул (знову вказаний у керівництві), який посилається на проблеми.

Примітка. Якщо ви співпрацюєте над проектом, вам слід уникати повторної передачі та зменшення розміру ваших зобов’язань, а код буде передано на GitHub. Якщо ви почнете змінювати історію версій під носом людей, ви можете зробити це складним для кожного, з помилками, які важко відстежити.

З Git існує майже нескінченна кількість можливих команд, але ці команди, мабуть, є єдиними, про які вам потрібно знати протягом перших кількох років програмування.

Сем Коркос - провідний розробник і співзасновник Sightline Maps, найінтуїтивнішої платформи для 3D-друку топографічних карт, а також LearnPhoenix.io, проміжного навчального сайту для проміжних розробок для створення масштабованих виробничих додатків із Phoenix та React.