گیت (git) چیست؟(آموزش مختصر Git)

گیت چیست:

یک نرم‌افزار کنترل نسخه است که به صورت آزاد و متن‌باز منتشر شده و برای بازنگری و مدیریت کد است. کار اصلی آن دنبال کردن تغییر فایل‌های کامپیوتری و دنبال کردن کارهای انجام شده روی آن‌ها توسط افراد مختلف است. هدف اولیه این نرم‌افزار برای استفاده در پروژه‌های نرم‌افزاری بوده‌است ولی می‌توان از آن تنها برای دنبال کردن تغییر فایل‌ها هم استفاده کرد. (ویکیپدیا)

گیت ابتدا برای توسعهٔ لینوکس توسط لینوس تروالدز به وجود آمد. هر دایرکتوری کاری در گیت یک مخزن کامل با تاریخچهٔ کامل تغییرها و قابلیت بازنگری آن‌ها است.

گیت به چه دردی می خورد!

این دیدگاه من از گیت هست: اگر شروع به نوشتن کد کنید بعد از گذشت مدتی واقعا دنبال کردن تغییراتی که روی کد دادیم ویرایش هایی که روی کد کردیم واقعا سخت میشه گیت باعث میشه تا بتوان روند کد را دنبال کرد. (البته این تعریف صرفا برای من که تنها کد مینویسم درست هست و گیت کارایی اصلیش اینه که بشه گروهی کد زد و در پروژه های بزرگ مشارکت کرد.)

شما می توانید مخرن گیت را به یکی از دو روش زیرایجاد کنید:

  1. یک پوشه محلی که ، آن را به مخرن گیت تبدیل کنید.
  2. از یک مخزن گیت موجود clone (نسخه برداری) کنید.

فعال کردن Git:

دستور git init یک مخزن گیت جدید می‌سازد. این مخزن برای تبدیل یک پروژه موجود و نسخه‌بندی نشده یا مقداردهی اولیه یک مخزن جدید و خالی استفاده می‌شود. (بنابراین اولین دستوری است که در یک پروژه جدید اجرا می‌شود.) اجرای git init یک زیر پوشه git. در پوشه کاری کنونی می‌سازد.

git init

دستور git config:

گیت با ابزاری به نام git config ارائه می‌شود که به شما امکان تنظیم و خواندن متغیرهای پیکربندی گیت را می‌دهد. برای شروع به کار با git باید اسم و ایمیل خود را تنظیم کنید تا مشخص شود چه کسی چه تغییراتی را انجام می دهد.

git config --golbal user.name "name"
git config --golbal user.email "email"

دستور git status:

با این دستور وضعیت مخزن خود را بررسی کنید. ببینید چه فایل‌هایی داخل آن هستند. چه تغییراتی نیازمنداضافه شدن و یا Commit شدن هستند.

هر فایلی در پوشه کاری شما به طور کلی دو وضعیت دارد: tracked(دنبال شده). یا untracked(دنبال نشده).

trackedفایل ‌ها می‌توانند سه حالت داشته باشند :

  1. unmodified(باید توسط دستور add به پروژه اضافه شوند.)
  2. staged(با دستور add به پروژه اضافه شده ولی commit نشده است.)
  3. modified(در پایان با commit کردن فایل ها به این حالت در می آیند.) 

به طور خلاصه، tracked فایل‌ها آنهایی هستند که گیت آن‌ها را می‌شناسد. untracked فایل‌ها  هر فایلی که در اسنپ‌شات آخر شما نبوده باشد و شما را آن را add نکرده باشید.

دستور git add:

این دستور فایلی را به مخزن شما اضافه نخواهد کرد. در عوض، گیت را از وجود فایل‌های جدید خبردار می‌کند. بعد از اینکه فایل‌ها را add کردید، آن‌ها به “اسنپ‌شات‌های”مخزنتان اضافه خواهند شد.

اضافه کردن یک فایل: 

git add file_name

اضافه کردن همه فایل ها:

git add -A

دستور git commit:

برای ثبت تغییرات یا به اصطلاح کامیت‌کردن تغییرات، از دستور commit استفاده می‌کنیم. در این مرحله فایل‌هایی را که با دستور add به حالت stage برده‌ایم در سیستم گیت ثبت می‌کنیم. برای ثبت هر تغییر نیاز است یک پیام هم با آن ثبت شود تا معلوم شود در این قسمت از تغییرات لحاظ شده چه کار کرده‌ایم، یا چه تغییراتی داده‌ایم. دستور کامیت بصورت زیر است:

git commit

که با اجرای این دستور ویرایش‌گرِ فایل شما باز شده و میتوانید پیام خود را در آن بنویسید و ذخیره کنید و به این صورت تغییرات فایل شما ثبت می‌شود و یک کامیت صورت می‌گیرد.

یک راه متداول‌تر هم که برای پیام‌های کامیت یک خطی کاربرد دارد، بصورت زیر است:

git commit -m پیام شما

اگر برخی فایل‌ها را اضافه کردید یا یک باگ را اصلاح کرده‌اید؛ اما نمی‌خواهید پیام کامیت دیگری را اضافه کنید، در این صورت می‌توانید از دستور گیت زیر با فلگ –no-edit استفاده کنید:

git commit --amend -m --no-edit

در اینجا یک نکته بسیار مهم را باید به خاطر بسپارید و آن این است که متمم زدن به کامیت آخر موجب بازنویسی سابقه کامیت می‌شود. این بدان معنی است که id کامیت زمانی که متمم می‌زنید، تغییر خواهد یافت.

همیشه commit message خوب بنویسیم تا تغییرات قابل ردیابی شود. یک commit message خوب شامل این مشود که چه تغییراتی در کجای برنامه ایجاد شده است و به چه دلیل

ایجاد فایل gitignore. :

در این فایل مشخص میکنیم که باید چه فایل هایی جزو پروژه نباشد و توسط گیت دنبال نشود به عنوان مثال بعد از ایجاد فایل اگر در داخل آن بنویسم log.* همه فایل هایی که پسوند log دارند به پروژه اضافه نمی شوند.

دستور git stash:

تغییرات را به صورت موقت نگه میدارد تا بعد یه پروژه اضافه شود.

git stash file_name

و برای اضافه کردن تغییرات به پروژه

git stash pop

دستور git diff:

دستور git diff تغییرات را با HEAD مقایسه می کند منظور تغییرات انجام شده نسبت به آخرین کامیت را نمایش میدهد. برای مقایسه با کامیت های قبل تر می توان بصورت زیر عمل کرد مثلا مقایسه با ۳ کامیت قبل تر

git diff HEAD~3

نمایش تغییرات فایل ها در حالت staged:

git diff --staged

دستور git log:

git log  همه تاریخچه کامیت را ببینید. همچنین می‌توانید از این دستور به صورت git log -p file_name برای مشاهده یک فایل استفاده کنید. با زدن q از آن خارج می‌شوید. برای دین تاریخچه به صورت تک خطی:

git log --oneline

دستور git blame :

git blame file_name  با این دستور می‌بینید که چه کسی چه چیزی را در file_name تغییر داده است.

git blame file_name

دستور git tag :

با این دستور می توان روی کامیت های مهم tag اضافه کرد. برای دیدن همه کامیت ها :

git tag

برای اضافه کردن tag به آخرین commit :

git tag "tag"

دستور git clean :

 با این دستور فایل‌های ردگیری نشده را در دایرکتوری کاری محلی حذف کنید.

  • فلگ n- برای نشان دادن فایل هایی که قرار است حذف شود پیش از حذف کردن است.
  • فلگ f- برای حذف بدون تایید فایل‌ها است.
  • فاگ i- برای حذف تایید می خواهد.
  • از فلگ d- برای حذف دایرکتوری‌های ردگیری نشده استفاده میشود.

دستور git commit –amend :

فرض کنید که شما چندین فایل را commit کرده‌اید و متوجه شده‌اید که پیام Commit اصلا واضح نیست. اکنون می‌خواهید که پیام را تغییر دهید. برای این کار می‌توانید از دستور git commit –amend استفاده نمایید.

دستور git revert :

 این دستور به بازگردانی تأثیرات تغییرهای صورت گرفته در commit می‌پردازد.

git revert commit_number

دستور git reset :

برگرداندن پروژه به چند commit قبلی که به دو طریق soft و hard انجام می شود در حالت soft تغییرات به صورت staged در می آید و برای ثبت شدن تغییرات باید commit اجرا شود ولی در حالت hard تغییرات ثبت می شود و نیازی به کامیت نیست.

git reset --soft commit_number
git reset --hard commit_number

برای عدم ذخیره و unstated کردن یک فایل می توان از دستور زیر استفاده کرد.

git reset file_name

دستور git checkout :

فرض کنیم که پشیمان شده و مجدد می‌خواهیم آخرین تغییرات را بازگردانی کنیم که در این صورت زیر می‌توان از کامند زیر استفاده کرد:

git checkout main

برای برگرداندن تغییرات فقط یک فایل به کامیت قبلی به صورت زیر عمل می کنیم:

git checkout -- name_file

دستور git :

از این دستور برای حذف فایل از پروژه و تاریخچه گیت استفاده می شود.

آشنایی با کاربرد Branch در Git (از سکان آکادمی)

زمانی که با استفاده از گیت یک ریپازیتوری جدید می‌سازیم، به صورت خودکار یک برنچ (شاخه) تحت عنوان master ساخته می‌شود که نقش شاخهٔ اصلی ریپازیتوری مذکور را بازی خواهد کرد و هر کامیتی که انجام دهیم نیز روی این شاخه اِعمال خواهد شد و این در حالی است که معمولاً‌ تیم‌های نرم‌افزاری از این شاخه به عنوان نسخه‌ای از نرم‌افزار استفاده می‌کنند که قرار است روی سرورهای اصلی دیپلوی گردد. با این تفاسیر، منطقی به نظر می‌رسد که این بِرَنچ به عنوان فضای آزمون و خطا در حین کدنویسی قملداد نشده بلکه فضاها یا بهتر بگوییم شاخه‌های فرعی دیگری ساخته و در آن‌ها اقدام به توسعهٔ فیچرهای جدید نموده سپس آن‌ها را با شاخهٔ مَستر ادغام نمود.

برای اضافه کردن یک branch :

git branch branch_name

برای رفتن به شاخه ای که ایجاد کرده ایم:

git checkout branch_name

برای اضافه کردن تغییرات branch به شاخه اصلی:

git merge branch_name

برای حذف یک branch:

git branch -d branch_name

اضافه کردن یک پروژه از github :

git clone git_hub_pr_address 

برای اضافه کردن تغییرات به گیت هاب:

git push origin  main

برای دریافت تغییرات از گیت هاب:

git pull origin  main

سخن پایانی

تا به اینجا تمام دستوراتی که برای ثبت تغییرات یا بازگردانی تغییرات و مقایسه تغییرات با فایل های قبلی را توضیح دادم فکر کنم برای کار کردن فعلا همین ها کافی است در صورت نیاز به دستورات جدید همین نوشته را آپدیت میکنم.

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