-
1. Иш бошланиши
- 1.1 Талқинларни бошқариш ҳақида
- 1.2 Git нинг қисқача тарихи
- 1.3 Git асоси
- 1.4 Командалар сатри
- 1.5 Git ни ўрнатиш
- 1.6 Git да биринчи созлашлар
- 1.7 Қандай ёрдам олиш мумкин?
- 1.8 Хулосалар
-
2. Git асослари
-
3. Git да тармоқланиш
-
4. Git серверда
- 4.1 The Protocols
- 4.2 Getting Git on a Server
- 4.3 Sizning SSH ochiq (public) kalitingizni generatsiyalash
- 4.4 Setting Up the Server
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Third Party Hosted Options
- 4.10 Хулосалар
-
5. Distributed Git
- 5.1 Distributed Workflows
- 5.2 Contributing to a Project
- 5.3 Maintaining a Project
- 5.4 Summary
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Qism modullar (Submodule)
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 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 Summary
-
A1. Appendix A: Git in Other Environments
- 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 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- 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 даги ниманидир нотўғри бажарсангиз маълумотларингизни йўқотиб қўйишингиз мумкин бўлган ўзи кўп бўлмаган жойлардан бири.
Кўп такрорланадиган бекор қилишни асосан бирор файлни қўшишни унутиб ёки бошқача изоҳ киритиб фиксирлашни бажарганингизда амалга оширишингизга тўғри келади. Агар сизга ушбу фиксирлашни яна бир бор амалга ошириш керак бўлса, у ҳолда commit командасини --amend
параметри билан беришингиз мумкин бўлади:
$ git commit --amend
Ушбу команда индексни олиб, уни фиксирлаш учун ишлатади. Агар охирги фиксирлашдан сўнг ҳеч қандай ўзгаришлар бўлмаган бўлса (масалан, сиз келтирилган командани бирданига олдингисидан сўнг ишга туширган бўлсангиз), у ҳолда лойиҳа ҳолати командада киритганингиздек бўлади.
Фиксирлашларнинг шарҳлари учун яна ўша таҳрирловчи ойна пайдо бўлади, лекин энди охирги фиксирлашга шарҳ киритилган ҳолатда. Сиз ушбу шарҳни одатдагидай таҳрирлашингиз мумкин ва у аввалгисини ўрнига ёзилади.
Мисол учун, агар сиз ушбу фиксирлашга қўшилиши керак бўлган файлдаги ўзгаришларни индекслашни унутганингизни сезган бўлсангиз, у ҳолда сиз қуйидаги каби йўл тутишингиз мумкин:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
Учта команда биргаликда битта фиксирлашни беради. Иккинчи фиксирлаш биринчи фиксирлашни натижасини алмаштиради.
Файлларни индекслашни бекор қилиш
Навбатдаги икки бўлимда биз қандай қилиб индексда ва ишчи каталогда ўзгариш киритишни намойиш этамиз. Ёқимлиси шуки, ушбу икки нарсани ҳолатини аниқлаш учун қўлланилувчи команда улардаги ўзгаришларни бекор қилиш ҳақидаги эслатмани ҳам кўрсатади. Мисол келтирамиз. Айтайлик, сиз иккита файлга ўзгариш киритдингиз ва уларни иккита алоҳида фиксирлаш тарзида ёзишни хоҳлаган эдингиз, бироқ адашиб 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 <file>...
ни қўллаш кераклиги ёзиб қўйилган.
Шу сабабли келинг ушбу маслаҳатга амал қилган ҳолда 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
файли ўзгартирилган бироқ энди у яна индексланмаганлар қаторида.
Note
|
|
Айни вақтда git reset
командаси ҳақида билишингиз керак бўлганлари мана шулар. Би бу reset
ҳақидаги қизиқарли батафсилроқ маълумотларни Reset Demystified да келтирамиз.
Файл ўзгаришини бекор қилиш
Агар сиз 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
Сиз кўриб турганингиздек ўзгаришлар бекор қилинди.
Important
|
Сиз |
Агар уни сизга ҳалақит бермаслигини хоҳласангиз, биз яширишни (stash) ва тармоқланишни Git да тармоқланиш бўлимда кўриб ўтамиз. Ушбу услублар кўпроқ мақтовга созовордир.
Ёдда тутинг Git да нимаики фиксирлашни қисми бўлса деярли ҳар доим уни тиклаш мумкин.
Ҳатто бошқа тармоқда турган, ўчирилган ва --amend
ёрдамида қайта ёзилган фиксирлашлар қайта тикланиши мумкин (маълумотларни тиклаш учун Data Recovery бўлимга қаранг).
Бунга қарамасдан фиксирлашга киритилмаганларнинг барчасини энди қайта кўрмайсиз.