آموزش سریع و ساده گیت – نکات پیشرفته‌

در آخرین قسمت از سری آموزش‌های سریع و ساده گیت قصد دارم که چند تا ویژگی و نکته پیشرفته‌تر برای مدیریت مخازن گیت رو با همدیگه مرور کنیم و روی مخزنی که تا اینجای کار مدیریت کردیم، اعمال بکنیم. خب با بررسی تفاوت‌ بین دو کامیت کارمون رو شروع می‌کنیم.

۱- بررسی تفاوت‌های بین دو کامیت

هر کامیتی که شما توی مخزن‌تون می‌کنید یه آی‌دی منحصر به فرد داره که به ما قابلیت دسترسی رو میده. اگه می‌خواید لیست تموم کامیت‌هایی که تا به حال کردید رو ببینید کافیه دستور git log رو وارد بکنید.

commit 2e3e8df76377cb0a8e162892215de93a30f74b03 (HEAD -> master)
Author: Arastoo <hi@arastoo.net>
Date:   Tue Nov 27 01:09:48 2018 +0330

    Second Commit

commit 6522647a9fa63906d2216d505b8c9578de30ba97
Author: Arastoo <hi@arastoo.net>
Date:   Tue Nov 27 01:08:08 2018 +0330

    First Commit

همونطور که می‌بینید هر کدوم از آي‌دی ها خیلی طولانی‌اند ولی خب برای دسترسی پیدا کردن بهشون معمولا چند تا از کاراکترهای اولش رو وارد بکنید کافیه.

برای هر لیست از کامیت‌ها می‌تونید اطلاعاتی مثل آی‌دی کامیت، نام کسی که کامیت کرده، تاریخ کامیت و پیغام کامیت رو مشاهده بکنید.

حالا برای اینکه جزئیات کاملتری از هر کامیت رو ببینیم کافیه از دستور git show همراه با آی‌دی کامیت مورد نظر استفاده بکنید:

git commit 652264

خروجی:

commit 6522647a9fa63906d2216d505b8c9578de30ba97 (HEAD)
Author: Arastoo <hi@arastoo.net>
Date:   Tue Nov 27 01:31:24 2018 +0330

    Second Commit

diff --git a/index.html b/index.html
new file mode 100644
index 0000000..557db03
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+Hello World

یه دستور کاربردی دیگه هم که می‌تونیم ازش استفاده بکنیم دستور diff هستش که میاد تغییرات و تفاوت‌های بین دو کامیت رو بررسی می‌کنه. برای اینکار کافیه آی‌دی دو کامیت رو داشته باشیم:

git diff 6522..9a83

شاید خروجی دستور براتون پیچیده باشه، بجای اون می‌تونید از ابزاری مثال git difftool استفاده بکنید.

۲- بازگشت به نسخه قبلی

خب یکی از هدف‌هایی که ما از استفاده گیت داریم اینه که به ما کنترل خوبی رو روی مدیریت نسخه‌های مختلف یه پروژه بده. خب برای اینکار ما از دستور git checkout استفاده می‌کنیم. قبلا از این دستور برای کنترل برنچ‌ها هم استفاده کردیم.

حالا تصور کنید که من می‌خوام فایل index.html رو به اولین کامیتی برگردونم که کردم. یعنی همون کامیت inital … برای اینکار کافیه آی‌دی کامیت و آدرس index.html رو داشته باشم:

git checkout 6522 index.html

حالا اگه محتویات index.html رو بررسی کنیم می‌بینیم که خالیه یا همون چیزی داخلش قرار داره که توی کامیت اول نوشتیم.

حالا موضوع مهم اینه که اگه من git log رو وارد کنم هنوز هم با کامیت‌های جدیدتر برخورد می‌کنم و می‌تونم به اونا برگردم. گیت فوق العاده‌س 🙂

۳. تغییر در یک کامیت

اگه توی آخرین کامیتی که کردید یه اشتباهی توی نوشتن پیامش کرده باشید چیکار می‌کنید؟ خب شاید بگید برمی‌گردم عقب یه کامیت جدید میزنم و… . خب این کار منطقی نیست. برای یه تغییر سریع روی کامیت ما دستور git commit –amend رو در اختیار داریم که به ما اجازه می‌ده تا پیغام آخرین کامیت رو اصلاح کنیم.

اما اگه مشکل کمی پیچیده‌تر باشه و بخوایم به یه کامیت منحصر به فرد دسترسی داشته باشیم چی؟

خب برای اینکار کافیه دستور revert رو همراه با آی‌دی کامیت وارد کنیم:

git revert 6522
# or
git revert HEAD

HEAD به آخرین کامیتی که شده اشاره می‌کنه.

۴. حل کردن Merge conflicts

تصور کنید که یک برنچ جدید ایجاد کردید و فایل قرار گرفته در برنچ قبلی رو در این برنچ تغییر دادید. حالا به برنچ master برمی‌گردید و عملیات مرج رو انجام می‌دید. اما با یه مشکل بر خورد می‌کنید:

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

گیت برای عملیات مرج کردن به صورت خودکار وارد کار میشه اما یه وقتایی هست که گیت نمی‌تونه این روند خودکار رو انجام بده. به همین خاطر این خطا رو برگشت میده.

حالا برای حل این مشکل می‌تونید به صورت دستی وارد عمل بشید. چطوری؟ خب فایل index.html رو باز کنید: می‌بینید که کلی تغییرات توش اعمال شده:

<<<<<<< HEAD
Hello World
=======
Hello Again
>>>>>>> new

در واقع گفته که شما در آخرین کامیت که HEAD آدرسشه نوشتید: Hello World اما در برنچ جدید که اسمش New هستش نوشتید Hello Again … من کدومشون رو نگه داری کنم؟

اینجاست که نیازه به صورت دستی وارد کار بشید و کدهای مربوط به برنچی که می‌خواید رو بزارید و مورد دیگر رو حذف کنید. در آخر هم git add index.html و git commit.

۵- .gitignore

بعضی وقت‌ها در یک پروژه قصد این رو ندارید که بعضی از فایل ها و دایرکتوری‌ها رو کامیت بکنید و یا اونا رو به استیج ببرید. خب شاید بگید که توی git add اسمی ازش نیاریم ولی خب ما وقتی پروژه بزرگی داشته باشیم بیشتر وقتا از git add -A استفاده می‌کنیم. اما اگه بخوایم همین دستور هم یه سری فایل ها رو شامل نشه از یه فایلی به اسم .gitignore استفاده می‌کنیم.

کافیه که یه فایل با نام .gitigonre درست کنید و تموم مواردی که نمی‌خواید گیت اونا رو استیج بکنه درش قرار بدید. مثلا:

*.log
build/
node_modules/
.idea/
my_notes.txt

در این حالت فایل‌هایی با پسوند .log، تمام محتویات دایرکتوری‌های build, node_modules,.idea و فایل my_notes.txt در مخزن گیت شما قرار نمی‌گیرند.

در پایان

این بود از سه قسمت ساده و کاربردی از آموزش گیت و گیت‌هاب. امیدوارم کاربردی بوده باشه. البته بگم که این آموزش‌ها رو به عنوان یه Crash Course در نظر بگیرید اما برای پیشرفت کردن در این موضوع می‌تونید از لینک‌های زیر استفاده بکنید.

منبع این مجموعه مطالب: وبسایت https://tutorialzine.com

بدون دیدگاه برای آموزش سریع و ساده گیت – نکات پیشرفته‌

    دیدگاهتان را بنویسید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *