Git
Chapters ▾ 2nd Edition

A3.3 Appendix C: Git команди - Snapshotting

Snapshotting

За основния работен процес по индексиране на съдържание и къмитването му в историята, съществуват само няколко основни команди.

git add

Командата git add добавя съдържание от работната директория в staging area (или “индексната област”) за следващия къмит. Когато се изпълни git commit, по подразбиране тя гледа какво има само в индекса, така git add се използва за определяне на това какво точно искате да включите в следващия snapshot.

Това е много важна за Git команда и се споменава десетки пъти в книгата. Ето по-важните места.

Представихме git add първо в Проследяване на нови файлове.

Показахме как да я използваме за разрешаване на конфликти при сливане в Конфликти при сливане.

Демонстрирахме как да я използваме интерактивно за да индексираме само специфични части от модифициран файл в Интерактивно индексиране.

Последно, емулирахме я на ниско ниво в Tree обекти, така че да получите представа какво се случва под повърхността.

git status

Командата git status ще ви покаже различните статуси на файловете в работната директория и индексната област. Кои файлове са променени и неиндексирани и кои са индексирани, но все още не са къмитнати. В нормалната си форма, тя също така подава основни съвети за това как да премествате файлове между тези етапи.

Видяхме status за първи път в Проверка на статуса на файловете. Използваме я почти навсякъде в книгата, но почти всичко, което можете да вършите с нея е обяснено там.

git diff

Командата git diff се използва, когато искате да видите разликите между кои да е две дървета. Това би могло да бъде разликата между работната област и индексната (което прави git diff без аргументи), между индексната област и последния къмит (git diff --staged), или между два къмита (git diff master branchB).

За пръв път срещнахме git diff в Преглед на индексираните и неиндексирани промени, където показахме как да видим кои промени са индексирани и кои все още не са.

Използвахме я и за търсене на възможни whitespace проблеми преди къмитване с опцията --check в Упътвания за къмитване.

Видяхме как да проверим за разлики между клонове по ефективен начин използвайки синтаксиса git diff A...B в Изследване на промените.

Използвахме я за да филтрираме whitespace разлики с флага -b а също и за сравнение на различни етапи от конфликтни файлове с --theirs, --ours и --base в Сливане за напреднали.

Накрая, използвахме я за ефективно сравнение на submodule промени със --submodule опцията в Първи стъпки с подмодулите.

git difftool

Командата git difftool просто стартира външен инструмент за показване на разликите между две дървета, в случай че предпочитате нещо различно от вградената git diff.

git commit

Командата git commit взема съдържанието на всички файлове индексирани преди това с git add и записва нов перманентен snapshot в базата данни, след което премества указателя на текущия клон към него.

Основите на къмитването показахме в Публикуване на промените (commit). Там също така показахме как с удобния флаг -a можем да прескочим git add стъпката в ежедневния работен процес и как с -m да подадем къмит съобщението директно от командния ред, вместо да пускаме редактора.

Във Възстановяване на направени действия разгледахме опцията --amend за да направим отново последния къмит.

В Накратко за разклоненията навлязохме в повече детайли за това какво прави git commit и защо го прави по дадения начин.

Видяхме как да подписваме къмити криптографски с флага -S в Подписване на къмити.

Последно, погледнахме какво прави зад кулисите git commit и как това е имплементирано в Commit обекти.

git reset

Командата git reset се използва основно за отмяна на действия, както подсказва името ѝ. Тя премества указателя на HEAD и по избор може да променя индексната област, както и работната директория с опцията --hard. Тази последна опция дава възможност за загуба на данни, ако се използва неправилно, така че трябва да я разберете добре преди да я ползвате.

За пръв път се срещнахме с простата форма на git reset в Изваждане на файл от индекса, където я използвахме за да извадим от индекса файл, върху който е изпълнена git add.

След това я разгледахме в повече детайли в Мистерията на командата Reset, секцията беше изцяло посветена на нея.

Използвахме git reset --hard за да отменим сливане в Прекъсване на сливане, където също така използвахме и git merge --abort, която е един вид wrapper за git reset.

git rm

Използваме git rm за изваждане на файлове от индексната област и работната директория в Git. Тя е подобна на git add в това, че индексира файл (само че за изваждане) от следващия къмит.

Погледнахме я в малко детайли в Изваждане на файлове, включително за рекурсивно изтриване на файлове и също така за изтриване на файлове само от индекса, но не и от работната директория с опцията --cached.

Единственият вид различно приложение на git rm в книгата е в Изтриване на обекти, където използвахме и обяснихме опцията --ignore-unmatch при изпълнение на git filter-branch, която просто игнорира грешката, ако файлът който се опитваме да изтрием не съществува. Това може да е полезно за ползване в скриптове.

git mv

Командата git mv е просто удобен заместител за ситуациите, когато трябва да преместите файл, да изпълните git add за новия файл и след това git rm за стария.

Само я споменахме накратко в Преименуване на файлове.

git clean

Командата git clean се използва за премахване на нежелани файлове от работната директория. Това може да включва премахването на временни обекти от компилиране или merge conflict файлове.

Разглеждаме много от опциите и сценариите, в които може да се използва clean командата в Почистване на работната директория.