-
1. شروع به کار (getting started)
-
2. مقدمات گیت (git basics chapter)
- 2.1 گرفتن یک مخزن گیت (Getting a Git Repository)
- 2.2 ثبت تغییرات در مخزن (Recording Changes to the Repository)
- 2.3 مشاهده تاریخچه کامیتها (Viewing the Commit History)
- 2.4 بازگرداندن تغییرات (Undoing Things)
- 2.5 کار کردن با ریموت ها (Working with Remotes)
- 2.6 تگ کردن (Tagging)
- 2.7 نام مستعار گیت (Git Aliases)
- 2.8 خلاصه (summary)
-
3. انشعابگیری در گیت (Git Branching)
-
4. گیت روی سرور (Git on the server)
- 4.1 پروتکلها (The Protocols)
- 4.2 راهاندازی گیت روی یک سرور (Getting Git on a Server)
- 4.3 ایجاد کلید عمومی SSH شما (Generating Your SSH Public Key)
- 4.4 نصب و راهاندازی سرور (Setting up server)
- 4.5 سرویسدهنده گیت (Git Daemon)
- 4.6 HTTP هوشمند (Smart HTTP)
- 4.7 گیتوب (GitWeb)
- 4.8 گیتلب (GitLab)
- 4.9 گزینههای میزبانی شخص ثالث (Third Party Hosted Options)
- 4.10 خلاصه (Summary)
-
5. گیت توزیعشده (Distributed git)
-
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. سفارشیسازی Git (Customizing Git)
-
9. گیت و سیستمهای دیگر (Git and Other Systems)
-
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 در ویژوال استودیو (Git in Visual Studio)
- A1.3 Git در Visual Studio Code (Git in Visual Studio Code)
- A1.4 Git در IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine (Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine)
- A1.5 Git در Sublime Text (Git in Sublime Text)
- A1.6 گیت در بش (Git in Bash)
- A1.7 Git در Zsh (Git in Zsh)
- A1.8 Git در PowerShell (Git in PowerShell)
- A1.9 خلاصه (Summary)
-
A2. پیوست B: گنجاندن گیت در برنامههای شما (Embedding Git in your Applications)
-
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)
7.2 ابزارهای گیت (Git Tools) - مرحلهبندی تعاملی (Interactive Staging)
مرحلهبندی تعاملی (Interactive Staging)
در این بخش، با چند دستور تعاملی Git آشنا میشوید که به شما کمک میکنند کامیتهای خود را طوری تنظیم کنید که تنها شامل ترکیبها و بخشهای مشخصی از فایلها باشند. این ابزارها زمانی مفیدند که شما تغییرات زیادی در چندین فایل ایجاد کردهاید و بعد تصمیم میگیرید که این تغییرات به جای یک کامیت بزرگ و نامنظم، به چند کامیت متمرکز و جداگانه تقسیم شوند. به این ترتیب، میتوانید مطمئن شوید که کامیتهای شما مجموعه تغییرات منطقی و جداگانهای هستند که به راحتی توسط توسعهدهندگان دیگر قابل بررسی میباشند.
اگر دستور git add
را با گزینه -i
یا --interactive
اجرا کنید، Git وارد حالت تعاملی میشود و چیزی شبیه به این نمایش داده میشود:
$ git add -i
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now>
شما میبینید که این دستور نمایی کاملاً متفاوت از ناحیه مرحلهبندی (staging area) نشان میدهد که احتمالا به آن عادت ندارید — اساساً همان اطلاعاتی که با git status
میگیرید اما به صورت خلاصهتر و مفیدتر.
تغییراتی که مرحلهبندی شدهاند در سمت چپ و تغییرات مرحلهبندی نشده در سمت راست فهرست میشوند.
پس از آن بخش «دستورات» قرار دارد که به شما اجازه میدهد کارهای متعددی مانند مرحلهبندی و بازگرداندن فایلها، مرحلهبندی بخشهایی از فایلها، افزودن فایلهای دنبالنشده، و نمایش تفاوتهای مرحلهبندی شده را انجام دهید.
مرحلهبندی و بازگرداندن فایلها (Staging and Unstaging Files)
اگر در پرامپت What now>
حرف u
یا عدد 2
(برای update) را تایپ کنید، از شما پرسیده میشود که کدام فایلها را میخواهید مرحلهبندی کنید:
What now> u
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
برای مرحلهبندی فایلهای TODO
و index.html
میتوانید شمارههای مربوطه را وارد کنید:
Update>> 1,2
staged unstaged path
* 1: unchanged +0/-1 TODO
* 2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
علامت *
کنار هر فایل به این معناست که آن فایل برای مرحلهبندی انتخاب شده است.
اگر پس از تایپ نکردن هیچ چیز در پرامپت Update>>
کلید Enter را فشار دهید، Git هر چیزی که انتخاب شده باشد را مرحلهبندی میکند:
Update>>
updated 2 paths
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> s
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
اکنون میتوانید ببینید که فایلهای TODO
و index.html
مرحلهبندی شدهاند و فایل simplegit.rb
هنوز مرحلهبندی نشده است.
اگر در این مرحله بخواهید فایل TODO
را از مرحلهبندی خارج کنید، باید گزینه r
یا عدد 3
(برای revert) را استفاده کنید:
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> r
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> 1
staged unstaged path
* 1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path
اگر دوباره وضعیت Git خود را بررسی کنید، میبینید که فایل TODO
از مرحلهبندی خارج شده است:
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> s
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
برای مشاهده تفاوت آنچه که مرحلهبندی کردهاید، میتوانید از دستور d
یا عدد 6
(برای diff) استفاده کنید.
این دستور فهرستی از فایلهای مرحلهبندی شده را نشان میدهد و میتوانید فایلهایی که میخواهید تفاوتهای مرحلهبندی آنها را ببینید انتخاب کنید.
این کار مشابه اجرای git diff --cached
در خط فرمان است:
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> d
staged unstaged path
1: +1/-1 nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder
<p id="out">...</p>
-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>
<script type="text/javascript">
با این دستورات پایه، میتوانید با حالت تعاملی git add
ناحیه مرحلهبندی خود را راحتتر مدیریت کنید.
مرحلهبندی بخشهایی از فایلها (Staging Patches)
همچنین امکان مرحلهبندی بخشهایی از فایلها و نه کل فایل وجود دارد.
مثلاً اگر در فایل simplegit.rb
دو تغییر ایجاد کردهاید و میخواهید یکی را مرحلهبندی کنید و دیگری را نه، این کار در Git بسیار ساده است.
در همان پرامپت تعاملی که در بخش قبلی توضیح داده شد، حرف p
یا عدد 5
(برای patch) را تایپ کنید.
Git از شما میپرسد کدام فایلها را میخواهید به صورت جزئی مرحلهبندی کنید؛ سپس برای هر بخش از فایلهای انتخابشده، بخشهایی از تفاوت فایل (hunks) را نمایش میدهد و از شما میپرسد که میخواهید آنها را مرحلهبندی کنید یا خیر، یکییکی:
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
end
def log(treeish = 'master')
- command("git log -n 25 #{treeish}")
+ command("git log -n 30 #{treeish}")
end
def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?
در این مرحله گزینههای زیادی در اختیار دارید.
با تایپ ?
فهرستی از کارهایی که میتوانید انجام دهید نمایش داده میشود:
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
به طور کلی، اگر بخواهید هر بخش را جداگانه آماده کنید، y
یا n
را تایپ خواهید کرد، اما آماده کردن همه بخشها در برخی فایلها یا رد تصمیمگیری برای یک بخش تا بعد نیز میتواند مفید باشد.
اگر بخشی از یک فایل را آماده کنید و بخش دیگری را آماده نکنید، خروجی وضعیت شما به این شکل خواهد بود:
What now> 1
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: +1/-1 +4/-0 lib/simplegit.rb
وضعیت فایل simplegit.rb
جالب است.
نشان میدهد که چند خط آماده شده و چند خط آماده نشده باقی ماندهاند.
شما این فایل را به صورت جزئی آماده کردهاید.
در این مرحله، میتوانید از حالت افزودن تعاملی خارج شوید و با اجرای فرمان git commit
فایلهای جزئی آماده شده را ثبت کنید.
همچنین لازم نیست حتماً در حالت افزودن تعاملی باشید تا فایلها را به صورت جزئی آماده کنید — میتوانید همین اسکریپت را با استفاده از git add -p
یا git add --patch
در خط فرمان اجرا کنید.
علاوه بر این، میتوانید از حالت پچ برای بازنشانی جزئی فایلها با فرمان git reset --patch
، بازیابی بخشهایی از فایلها با فرمان git checkout --patch
و ذخیرهسازی جزئی فایلها با فرمان git stash save --patch
استفاده کنید.
در ادامه، هنگام بررسی کاربردهای پیشرفتهتر این فرمانها، جزئیات بیشتری در این زمینه ارائه خواهیم داد.