مشاهده‌ تغییرات مرحله‌بندی شده و مرحله بندی نشده

اگر خروجی دستور git status برای شما خیلی مبهم است و می‌خواهید دقیقا بدانید چه تغییراتی ایجاد کرده‌ایدد، می‌توانید از دستور git diff استفاده کنید. این دستور به شما کمک می‌کند تا دقیقاً خطوطی که اضافه حذف شده‌اند را مشاهده کنید. معمولاً از git diff برای پاسخ به دو سوال زیر استفاده می‌شود:

۱. چه تغییراتی ایجاد کرده‌ام اما هنوز مرحله‌بندی نکرده‌ام؟

۲. چه تغییراتی را مرحله‌بندی کرده‌ام که قرار است کامیت کنم؟

مشاهده تغییرات مرحله‌بندی‌نشده

برای دیدن تغییراتی که هنوز مرحله‌بندی‌ نشده اند، کافی است دستور git diff را بدون آرگومان‌های اضافی اجرا کنید:

$ git diff

خروجی به شما تغییرات ایجاد شده در فایل‌هایی که هنوز مرحله‌بندی نکرده‌اید را نمایش می‌دهد.

مشاهده تغییرت مرحله‌بندی شده

اگر می‌خواهید تغییراتی که مرحله‌بندی کرده‌اید و قرار است در کامیت بعدی قرار بگیرند را مشاهده کنید، می‌توانید از دستور git diff --staged استفاده کنید:

$ git diff --staged 

این دستور تغییرات مرحله‌بندی شده را با آخرین کامیت مقایسه می‌کند

مثال‌های عملی

فرض کنید شما فایل README را ویرایش و مرحله‌بندی کرده‌اید و سپس فایل CONTRIBUTING.md را ویرایش کرده‌اید بدون اینکه آن را مرحله‌بندی کنید. با اجرای git status ،خروجی به شکل زیر خواهد بود:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

 modified: 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 diff استفاده می‌کنید:

$ git diff

خروجی نشان می‌دهد که چه خطوطی اضافه شده یا تغییر یافته است.

مشاهده تغییرات پس از مرحله‌بندی

اگر فایل CONTRIBUTING.md را مرحله‌بندی کنید و سپس آن را ویرایش کنید، می‌توانید از git diff برای مشاهده تغییرات مرحله‌بندی شده و غیر مرحله‌بندی شده استفاده کنید. به عنوان مثال:

$ git add CONTRIBUTING.md
$ echo '# test line' >> CONTRIBUTING.md
$ git status

خروجی نشان می‌دهد که تغییرات جدیدی وجود دارد که هنوز مرحله‌بندی نشده‌اند.

سپس با استفاده از git diff می‌توانید تغییرات غیر مرحله‌بندی شده را مشاهد کنید:

$ git diff

این روش به شما این امکان را می‌دهد که به طور دقیق تغییرات ایجاد شده را پیگیری کنید و اطمینان حاصل کنید که همه چیز قبل از کامیت آماده است.

ویرایش تغییرات با استفاده از git diff --cached

برای مشاهده تغییراتی که تاکنون مرحله‌بندی کرده‌اید، می‌توانید از دستور git diff --cached (یا --staged که معادل آن است) استفاده کنید:

$ git diff --cached
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8ebb991..643e24f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -65,7 +65,8 @@ branch directly, things can get messy.
Please include a nice description of your changes when you submit your PR;
if we have to read the whole diff to figure out why you're contributing
in the first place, you're less likely to get feedback and have your change
-merged in.
+merged in. Also, split your changes into comprehensive chunks if your patch is
+longer than a dozen lines.

If you are starting to work on a particular area, feel free to submit a PR
that highlights your work in progress (and note in the PR title that it's

استفاده از ابزارهای خارجی برای نمایش تغییرات

در ادامه کتاب، ما با استفاده از دستور git diff در روش‌های مختلف خواهیم پرداخت. اگر ترجیح می‌دهید از یک برنامه نمایش تفاوت گرافیکی یا خارجی استفاده کنید، می‌توانید به جای دستور git diff از git difftool استفاده کنید. این دستور به شما این امکان را می‌دهد که تغییرات را در نرم‌افزارهایی مانند emerge, vimdiff و سایر برنامه‌ها(شامل محصولات تجاری) مشاهده کنید. برای مشاهده گزینه‌های موجود در سیستم خود، می‌توانید دستور زیر را اجرا کنید:

$ git difftool --tool-help