git diff را قبل از add بزنید
در ریشهٔ مخزن بنویسید git diff. خروجی پیشفرض پچ است: خط با منها از فایل قبلی رفته، خط با بعلاوه آمده. سند رسمی سه شکل پرکاربرد را کنار هم گذاشته است. git diff کار درخت را با ایندکس مقایسه میکند. git diff --cached یا مترادفش git diff --staged همان چیزی است که اگر الان git commit بدون -a بزنید ثبت میشود. git diff HEAD همهٔ تغییر درخت از آخرین commit است؛ همان چیزی که git commit -a میفرستد.
اگر فایلی را add کردهاید و باز ویرایشش کردهاید، هر دو فرمان لازم است. اول --cached تا ببینید چه چیزی وارد commit میشود، بعد بدون آرگومان تا ببینید چه چیزی هنوز بیرون مانده. status این دو لایه را جدا مینویسد؛ diff متن را نشان میدهد.
برای یک فایل: git diff -- path/to/file. سند میگوید مسیر بعد از -- خروجی را محدود میکند. اگر فقط نامها را میخواهید git diff --name-status حرف وضعیت را میدهد: M تغییر، A اضافه، D حذف. برای مرور سریع git diff --stat تعداد خط را مینویسد.
git status بگویید کدام فایل؛ diff بگویید کدام خط
صفحهٔ git-status میگوید سه دسته میبینید: اختلاف ایندکس با HEAD که با commit خالی میرود، اختلاف درخت کار با ایندکس، و فایل ردیابینشده که gitignore ردشان نکرده. دستهٔ دوم و سوم را با add به commit میآورید. فایل جدید را status نشان میدهد و diff معمولی نه، چون هنوز ایندکس ندارد. اول add، بعد git diff --cached.
اگر تا اینجا یک بار git diff HEAD را زدهاید، در دیدگاه بنویسید کدام خط را نمیخواستید commit شود. همان یک خط معمولاً دلیل خواندن diff است.
مثال خود سند: git diff HEAD^ HEAD آخرین commit را با قبلیاش مقایسه میکند؛ برای دیدن آنچه همین الان ثبت شد، نه آنچه هنوز باز است. git diff topic..master نوک دو شاخه را میگذارد کنار هم. اینها را با diff درخت کار قاطی نکنید.
git status با -v متن تغییر ایندکس را هم نشان میدهد، شبیه git diff --cached. اگر دو بار -v بزنید، تغییر درخت کار را هم میآورد. برای عادت روزانه همان دو فرمان جدا روشنتر است: اول status برای نام، بعد diff برای خط.
commit با -a فایل ردیابیشدهٔ تغییرکرده را برمیدارد و فایل جدید را نه. اگر status یک فایل Untracked نشان داد و شما -a زدید، آن فایل در commit نیست. diff را بخوانید، add کنید، دوباره --cached را ببینید، بعد پیام را بنویسید.
علامت بعلاوه را با چشم دنبال نکنید؛ منها را هم بخوانید
خط سبز اضافه است؛ خط قرمز حذف. اگر کلیدی را پاک کردهاید، منها مهمتر از بعلاوه است. git diff --check اگر نشانگر تداخل یا خطای فاصله طبق core.whitespace بیاورد، با کد غیرصفر تمام میشود. برای مقایسهٔ دو فایل بیرون مخزن git diff --no-index file1 file2.
منبع هر سه فرمان صفحهٔ git-diff و git-status در git-scm.com است، نه آموزش یوتیوب.
قبل از commit آخر، git diff را خواندید یا فقط لیست فایل status را؟