-
1. Почеток
- 1.1 За верзиска контрола
- 1.2 Кратка историја на Git
- 1.3 Основи на Гит
- 1.4 Командната линија
- 1.5 Инсталирање на Git
- 1.6 First-Time Git Setup
- 1.7 Getting Help
- 1.8 Заклучок
-
2. Основите на Git
-
3. Гранење во Git
- 3.1 Гранење објаснето
- 3.2 Основно разгранување и спојување
- 3.3 Branch Management
- 3.4 Работни процеси
- 3.5 Далечински гранки
- 3.6 Ребаза
- 3.7 Заклучок
-
4. Git на Сервер
- 4.1 Протоколите
- 4.2 Добивање на Git на сервер
- 4.3 Генерирање на вашиот SSH јавен клуч
- 4.4 Поставување на серверот
- 4.5 Гит демон
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опции за домаќини на трети лица
- 4.10 Заклучок
-
5. Дистрибуиран Git
- 5.1 Дистрибуирани работни процеси
- 5.2 Придонес кон проект
- 5.3 Приватен мал тим
- 5.4 Одржување на проект
- 5.5 Заклучок
-
6. GitHub
-
7. Git Алатки
- 7.1 Revision Selection
- 7.2 Интерактивно стажирање
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Напредно спојување
- 7.9 Rerere
- 7.10 Дебагирање со Git
- 7.11 Submodules
- 7.12 Збивање
- 7.13 Заменување
- 7.14 Складирање на ингеренции
- 7.15 Заклучок
-
8. Персонализација на Git
- 8.1 Git Configuration
- 8.2 Git Атрибути
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Заклучок
-
9. Git и други системи
- 9.1 Git како Клиент
- 9.2 Мигрирање кон Git
- 9.3 Заклучок
-
10. Внатрешноста на Git
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Заклучок
-
A1. Appendix A: Git во други околини
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Заклучок
-
A2. Appendix B: Вметнување на Git во вашите апликации
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Appendix C: Git команди
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.4 Основите на Git - Поништување на нештата
Поништување на нештата
Во секоја фаза, можеби ќе сакате нешто да го вратите. Еве, ќе разгледаме неколку основни алатки за поништување на промените што сте ги направиле. Бидете внимателни, бидејќи не можете секогаш да ги вратите некои од овие уреди. Ова е една од ретките области во Git каде што може да изгубите некоја работа ако го направите тоа погрешно.
Еден од заедничките undos се случува кога ќе се посветите премногу рано и можеби заборавете да додадете некои датотеки, или ќе ја расипате вашата порака за извршување.
Ако сакате да го повторите тоа извршување, направете дополнителни промени што ги заборавивте, да ги изведите и повторно да ги извршите со помош на опцијата --amend
:
$ git commit --amend
Оваа команда ја зема вашата област на поставување и ја користи за извршување. Ако не сте направиле никакви промени од последното извршување (на пример, ја извршите оваа команда веднаш по претходното извршување), тогаш вашето слика ќе изгледа сосема иста, а сите што ќе ги смените е вашата порака за извршување.
Истиот уредувач на порака-порака се активира, но веќе ја содржи пораката од претходното извршено. Можете да ја уредите пораката исто како и секогаш, но таа го пребрише вашето претходно извршено.
Како пример, ако извршите и потоа сфатите дека сте заборавиле да ги измените промените во датотеката што сакавте да ја додадете во оваа залог, можете да направите нешто слично:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
Вие завршувате со една посветеност - второто извршување ги заменува резултатите од првото.
Важно е да се разбере дека кога ќе ја промените вашата последна посветеност, вие не го решавате тоа како replacing целосно со нова, подобрена обврска која го турка старото извршување од патот и го става новото извршување на свое место. Ефективно, тоа е како ако претходната заложба никогаш не се случила и нема да се појави во историјата на вашето складиште.
Очигледна вредност на амандман се обврзува да направи помали подобрувања на вашата последна заложба, без да ја препречувате историјата на складиштето со пораките за извршување на формуларот, "Упс, заборавив да додадам датотека" или "Дарн", фиксирање на грешка во последното извршување ''.
Расклопување на изведена датотека
Следните два дела демонстрираат како да работите со вашата област на поставување и промените на работниот директориум.
Убавиот дел е тоа што командата што ја користите за да ја одредите состојбата на овие две области, исто така, потсетува како да ги вратите промените во нив.
На пример, да речеме дека сте смениле две датотеки и сакате да ги извршите како две одделни промени, но случајно ќе напишете git add *
и ќе ги прикажете и двете.
Како можеш да однесеш некоја од двете?
Командата git status
ве потсетува:
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
Веднаш под текстот "Changes to be committed", се вели дека употребува git reset HEAD <датотека> ...
за да не се прикаже.
Значи, ајде да го искористиме тој совет за да ја исклучиме датотеката CONTRIBUTING.md
:
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Командата е малку чудна, но работи.
Датотеката CONTRIBUTING.md
е модифицирана, но уште еднаш не е инсталирана.
Точно е дека git reset
може да биде опасна команда, особено ако го дадете знакот` --hard`.
Меѓутоа, во сценариото опишано погоре, датотеката во вашиот работен директориум не е допрена, па затоа е релативно безбедна.
Засега оваа магична повик е се што треба да знаете за командата git reset
.
Ние ќе одиме во многу повеќе детали за тоа што "reset" прави и како да го совладате за да направите навистина интересни работи во << _git_reset >>.
Немодифицирање на модифицирана датотека
Што ако сфатите дека не сакате да ги задржите вашите промени во датотеката CONTRIBUTING.md
?
Како можете лесно да го немодифицирате - вратете го назад кон она што изгледаше како последен пат (или првично клониран, или пак да го внесете во вашиот работен директориум)?
За среќа, git status
ви кажува како да го направите тоа, исто така.
Во последниот пример излез, неизградената област изгледа вака:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Тоа ви кажува прилично експлицитно како да ги отфрлите промените што сте ги направиле. Ајде да направиме што вели:
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Можете да видите дека промените се вратени.
Важно е да се разбере дека git checkout - <file>
е опасна команда.
Сите промени што ги направивте во таа датотека ги нема - Git едноставно копираше друга датотека над неа.
Никогаш не користете ја оваа команда, освен ако апсолутно знаете дека не сакате датотеката.
Ако сакате да ги задржите промените што сте ги направиле во таа датотека, но сепак треба да го извадиме од патот за сега, ќе преминеме преку растурање и разгранување во Гранење во Git; овие се генерално подобри начини да се оди.
Запомнете, нешто што е committed во Git речиси секогаш може да се обнови.
Дури и се обврзува дека се наоѓаат на филијали кои беа избришани или се обврзуваа дека се презапишани со --endend
, може да се обнови (види Data Recovery за наплата на податоци).
Сепак, сè што ќе го изгубиш што никогаш не беше посветено, веројатно никогаш нема да се види повторно.