Вступ
Цього разу ми розберемо команди 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()));