Інформаційні команди Git

Вступ

Цього разу ми розберемо команди Git, які дозволяють отримати інформацію про коміти і зміни у них.

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


Попередня частина


git status

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

$  git status
На гілці master
Ваша гілка оновлена у відповідности з «origin/master».
nothing to commit, working tree clean

Тепер створимо новий файл і виконаємо команду знову.

$ touch example.txt
$ git status
На гілці master
Ваша гілка оновлена у відповідности з «origin/master».
Несупроводжувані файли:
  (використовуйте "git add <file>..." щоб включити те, що повинно бути здійснено)

	example.txt

немає змін, доданих у комміт, але існують несупроводжувані файли (використовуйте "git add" щоб додати файли для супроводжування)

Почнемо відстежувати цей файл та повторимо команду.

$ git status
На гілці master
Ваша гілка оновлена у відповідности з «origin/master».
Зміни для здійснення:
  (використовуйте "git reset HEAD <file>..." щоб прибрати з буфера)

	новий файл:    example.txt

git log

Log виводить повну історію комітів поточної вітки. Ніяких параметрів передавати не потрібно, досить лише написати git log. При цьому відкриється нове вікно консолі, у якому виведеться історія. Вікно можна закрити натиснувши q(при цьому має бути увімкнена англійська розкладка клавіатури). Тут і надалі в цьому уроці я наводитму лише частини виводу.

$ git log
commit d4fdb754c5d5d50ced3e5aa233b83a3f0749d1d1
Author: DeadSith <deadsith@hotmail.com>
Date:   Mon Dec 12 20:01:47 2016 +0000

    Reverted profile viewing

commit 0e45267bf0e6f562ef4dbe2ae344e858aee76468
Author: DeadSith <deadsith@hotmail.com>
Date:   Mon Dec 12 19:06:18 2016 +0000

    Add support for colaborators

git diff

Diff показує різницю між двома довільними комітами. Існує багато різних форм і параметрів для цієї команди. Я розповім лише про основні варіанти, про інші можна почитати в офіційній документації.
Додамо довільний текст у файл example.txt(у будь-якому текстовому редакторі) і виконаємо команду git diff. Унаслідок цього відкриється нове вікно в консолі, у яке буде виведено різницю між поточним станом репозиторію і останнім комітом.

diff --git a/example.txt b/example.txt
index e69de29..15cdaf1 100644
--- a/example.txt
+++ b/example.txt
@@ -0,0 +1 @@
+Lorem ipsum.

У вікні показано, які саме файли змінено та зміни у них. Додані рядки починаються з +, видален з -. Щоб вимкнути це вікно, треба натиснути q. Тепер видалимо файл example.txt і збережемо зміни в Git.

$ rm ./example.txt
$ git add .

Інша форма цієї команди дозволяє подивитись різницю між двома комітами. Для цього необхідно знати їх hash, який можна отримати з команди git log.

# виводить зміни між 2 комітами з мого репозиторію. 
$ git diff 868b63a7a7c58a2d088e22e70b0065c2425ebd29 63ce0c65005417566e0d6ced495ab8ea37ad09eb

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

git show

Show виводить інформацію про коміт та всі зміни у ньому. Іншими словами, він поєднує вивід git log та git diff. Вивід цієї команди також відкривається у новомі вікні консолі, з якого можна вийти натиснувши q.

$ git show 868b63a7a7c58a2d088e22e70b0065c2425ebd29
commit 868b63a7a7c58a2d088e22e70b0065c2425ebd29
Author: DeadSith <deadsith@hotmail.com>
Date:   Wed Dec 7 16:59:12 2016 +0000

    Started implementing changes viewing

diff --git a/src/Identity/Controllers/HomeController.cs b/src/Identity/Controllers/HomeController.cs
index da3c624..3d71206 100755
--- a/src/Identity/Controllers/HomeController.cs
+++ b/src/Identity/Controllers/HomeController.cs
@@ -119,7 +119,7 @@ namespace Identity.Controllers
         {
             var repo =
                _context.Repos.Include(r => r.Author)
-                   .First(
+                   .FirstOrDefault(
                        r =>
                            String.Equals(r.RepoName.ToLower(), repoName.ToLower()) &&
                            String.Equals(r.Author.UserName.ToLower(), userName.ToLower()));
Share Comments
comments powered by Disqus