-
1. شروع به کار
- 1.1 دربارهٔ کنترل نسخه
- 1.2 تاریخچهٔ کوتاهی از گیت
- 1.3 گیت چیست؟
- 1.4 خط فرمان
- 1.5 نصب گیت
- 1.6 اولین راهاندازی گیت
- 1.7 کمک گرفتن
- 1.8 خلاصه
-
2. مقدمات گیت
- 2.1 دستیابی به یک مخزن گیت
- 2.2 ثبت تغییرات در مخزن
- 2.3 دیدن تاریخچهٔ کامیتها
- 2.4 بازگردانی کارها
- 2.5 کار با ریموتها
- 2.6 برچسبگذاری
- 2.7 نامهای مستعار در گیت
- 2.8 خلاصه
-
3. شاخهسازی در گیت
- 3.1 شاخهها در یک کلمه
- 3.2 شاخهسازی و ادغام مقدماتی
- 3.3 مدیریت شاخه
- 3.4 روند کاری شاخهسازی
- 3.5 شاخههای ریموت
- 3.6 ریبیسکردن
- 3.7 خلاصه
-
4. گیت روی سرور
- 4.1 پروتکلها
- 4.2 راهاندازی گیت در سرور
- 4.3 ساختن کلید عمومی SSH
- 4.4 نصب و راهاندازی سرور
- 4.5 دیمن گیت
- 4.6 HTTP هوشمند
- 4.7 گیتوب
- 4.8 گیتلب
- 4.9 گزینههای شخصی ثالث میزبانی شده
- 4.10 خلاصه
-
5. گیت توزیعشده
- 5.1 روندهای کاری توزیعشده
- 5.2 مشارکت در یک پروژه
- 5.3 نگهداری یک پروژه
- 5.4 خلاصه
-
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 Submodules
- 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. پیوست A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in Eclipse
- A1.5 Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.6 Git in Sublime Text
- A1.7 Git in Bash
- A1.8 Git in Zsh
- A1.9 Git in PowerShell
- A1.10 Summary
-
A2. پیوست B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. پیوست 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 مقدمات گیت - بازگردانی کارها
بازگردانی کارها
در هر مرحله، شاید بخواهید که چیزی را یا کاری را بازگردانی یا برگشت دهید. اینجا برخی ابزار پایهای برای بازگردانی تغییرات و کارهایی که انجام دادهاید را بررسی خواهیم کرد. توجه کنید، چرا که همیشه نمیتوانید همهٔ همین بازگردانیها را بازگردانی کنید. اینجا یکی از معدود حیطههای گیت است که اگر اشتباه انجامش دهید امکان دارد مقداری از کارتان از دست برود.
یکی از متداولترین بازگشتها زمانی است که شما خیلی زود کامیت میگیرید و احتمالاً فراموش میکنید چند فایی اضافه کنید یا یا پیام کامیتتان را خراب کردهاید.
اگر میخواهید دوباره آن کامیت را بگیرید، تغییرات اضافه فراموش شده را اعمال کنید، آنها را استیج کنید و دوباره با استفاده از آپشن --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 comitted»، به شما میگوید از git reset HEAD <file> ...
برای آناستیج استفاده کنید.
پس بایید به توصیه گیت گوش کنیم و فایل CONTRIBURING.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
بدانید.
بعدتر در بخش Reset Demystified با جزئیات بیشتری وارد بحث reset
میشویم که چه کاری میکند و چطور میتوان در آن خبره شد تا کارهای جالبتری انجام داد.
بازگردانی تغییرات یک فایل تغییریافته
اگر ببینید که دیگر نمیخواهید تغییرات فایل COUNTRIBUTING.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
شما میتوانید ببینید که تغییرات به حالت اول بازگشتند.
مهم
|
مهم است که بدانید دستور |
اگر مایل هستید تا تغییراتی که ایجاد کرده بودید را حفظ کنید اما باز هم لازم است که موقتاً آنها را از سر راهتان بردارید، در شاخهسازی در گیت به بررسی استش و شاخهسازی خواهیم پرداخت؛ به طور کل اینها راههای بهتری برای انجام این کار هستند.
یادتان باشد، هرچیزی که در گیت کامیت شده باشد تقریباً همیشه میتواند بازگردانی شود.
حتی کامیتهایی که بر روی شاخههایی که حذف شدهاند وجود داشتند یا
کامیتهایی که با فلگ --amend
بازنویسی شده بودند میتوانند بازگردانی شوند (بخش Data Recovery را برای بازیابی داده ببینید).
با این حال، هر چیزی را که از دست میدهید که هرگز کامیت نشده، قریب به یقین دیگر نخواهید دید.