Git
معرفی

نکات طلایی Git

نکات مهم در خصوص git

  • در گیت هیچ مخزن اصلی وجود ندارد و ما تعیین کننده مخزن اصلی هستیم

  • گیت تغییرات رو دنبال می کنه نه ورژن ها رو

  • گیت تغییرات فایل های تصویری، چندرسانه ای و... را دنبال نمی کنه بلکه فقط ورژن اونها رو دنبال میکنه

  • در گیت 3 حالت تغییرات داریم workingdirectory, staged, commited

  • در گیت هد بر روی یک برنچ و کامیت قرار دارد که هد مشخص می کند الان بر روی چی داریم کار می کنیم

  • بهتر است در ویرایشگر کد خود پلاگین های مربوط به گیت را برای مدیریت بهتر نصب کنید

دستورات کاربردی

  • git --version : نسخه گیت نصب شده بر روی سیستم فعلی
  • git --help : راهنمای سیستم کنترل ورژن git
  • git init : ایجاد ریپازیتوری (مخزن) خالی در مسیر جاری
  • git add : افزودن یک یا تمامی فایل های تغییر یافته به فضای استیج
  • git commit -m "Message" : افزودن فایل های استیج بعنوان یک کامیت و تغییر نهایی
  • git commit -am "Message" : افزودن به استیج و کامیت همزمان با آن (نکته : فقط فایل های قدیمی فایل های جدید را باید اول add کنیم)
  • git commit --amend -m "Message" : اصلاح آخرین کامیت ریکامیت میکنه با کامیت قبل
  • git status : وضعیت فعلی تغییرات را نشان میدهد ورکینگ دایرکتوری و استیج را
  • git merge : ادغام تغییرات از یک برنچ به برنچ دیگر
  • gitignore.io : مرجعی جهت ایجاد هر چه بهتر فایل ایگنور (البته ide های مختلف هم راه های جالبی مثل این سایت دارند)
  • touch .gitignore : ایجاد فایل ایگنور
  • git rm --cached -r [Files] : بعد از ایگنور فایلی که قبلا در کامیت ها بوده را به این شکل جدا میکنیم از پروژه
  • .gitkeep : برای دنبال کردن پوشه های خالی توسط گیت معمولا فایلی با این پسوند در پوشه خالی ایجاد میشود
  • git ls-tree : لیست محتویات داخل یک کامیت
  • git branch : لیست برنچ های موجود در ریپازیتوری فعلی
  • git show : نمایش اطلاعات مربوط به یک commit، برچسب (tag) یا شیء Git

بازگردانی تغییرات ورکینگ دایرکتوری به آخرین تغییر در استیج یا در صورت نبودن در استیج به آخرین تغییر کامیت Unchange

  • git restore [Files] اصلی
  • git checkout -- [Files] بازگردانی به هد برنچ فعلی

بازگردانی تغییرات استیج شده به ورکینگ دایکتوری Unstage

  • git restore --staged [Files] اصلی
  • git reset HEAD [Files] بازگردانی به هد
  • git rm --cached -r [Files] برای اولین ترکینگ استفاده میشه و زمانی که یک فایل ایگنور شد و قبلا بوده در کامیت ها

پیکرندی

از طریق دستور زیر می توانید گیت را کانفیگ کنید.

git config

با اجرای این دستور میتوانید، تمامی گزینه های در دسترس را مشاهده کنید.

محل فایل پیکربندی

  1. --[no-]global : تنظیمات در سطح کاربر فعلی سیستم عامل اعمال می شود.

    • $home\gitconfig : مسیر فایل gitconfig global در ویندوز
    • ~\gitconfig : مسیر فایل gitconfig global در لینوکس

  2. --[no-]system : تنظیمات در سطح کل سیستم عامل و کاربران آن اعمال می شود.

    • program files\git\etc\gitconfig : مسیر فایل gitconfig system در ویندوز
    • etc/gitconfig : مسیر فایل gitconfig system در ویندوز

  3. --[no-]local : تنظیمات در سطح پروژه فعلی فقط اعمال می شود. (پیشفرض)

    • myproject/.git/config : مسیر فایل gitconfig local در ویندوز و لینوکس

  4. --[no-]worktree : تنظیمات در سطح worktree اعمال می شود.

  5. و...

اکشن های پیکربندی Git

  1. --[no-]add : مقدار تنظیم جدید را اضافه میکنه به فایل تنظیمات : name value
  2. --[no-]get : دریافت مقدار : name [value-pattern]
  3. --[no-]replace-all : مقدار تنظیم جدید را با تنظیمات قبلی این مقدار جایگزین میکنه (پیشفرض) : name value [value-pattern]
  4. -l, --[no-]list : لیست تنظیمات موجود در فایل config (در تمامی سطوح)
  5. و...

پیکربندی های کاربردی

  1. init.defaultbranch : تغییر نام برنچ پیشفرض (در گیت پیشفرض master هست بهتره روی main تنظیم بشه چرا که github از main پیشفرض استفاده میکنه)
  2. user.name : تنظیم کردن نام کاربر در گیت (بهتره نام و نام خانوادگی را در این مقدار قرار بدید)
  3. user.email : تنظیم کردن ایمیل کاربر در گیت
  4. author.name : تنظیم کردن نام نویسنده در گیت
  5. author.email : تنظیم کردن ایمیل نویسنده در گیت
  6. committer.name : تنظیم کردن نام کامیتر در گیت
  7. committer.email : تنظیم کردن ایمیل کامیتر در گیت
  8. و...

Git Log

لیست کردن کامیت های ریپازیتوری فعلی

گزینه های کاربردی :

  • -n : چه تعداد کامیت لیست شود
  • --since="str time" : لیست کامیت های بعد از ...
  • --after="str time" : لیست کامیت های بعد از ...
  • --until="str time" : لیست کامیت های قبل از ...
  • --before="str time" : لیست کامیت های قبل از ...
  • --author="author" : لیست کامیت های نویسنده ای خاص
  • --grep="REGEX" : لیست کامیت ها بر اساس جستجوی عبارت با قائده (Global Regular Experation)
  • --oneline : خلاصه کردن لیست کامیت ها در یک خط
  • HASH HASH : لیست کردن کامیت ها از هش - تا هش
  • .. HASH : لیست کردن کامیت ها تا هش -
  • HASH .. : لیست کردن کامیت ها از هش - به بعد
  • -p : تغییرات نیز همراه با لیست کامیت ها آورده میشوند
  • --stat : تعداد حذف و اضافه و تعداد فایل های تغییر یافته را نیز لیست میکند
  • --all : تمامی کامیت ها در برنچ ها را لیست میکند حتی کامیت های جلوتر از برنچ فعلی را

یک لاگ عالی که میتوانید با فرمان Git Lg به اون دسترسی داشته باشید

git config --global alias.lg "log --all --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Git Checkout

سوئیچ بین برنچ های موجود در ریپازیتوری ها

گزینه های کاربردی :

  • git checkout HASH -- [Files] از کامیت نامبرده یک برنچ موقت ایجاد میکنه که شما میتونید از کامیت اطلاعات مورد نیاز را بردارید و بعد یا سوئیچ کنید به برنچ قبلی یا اینکه برنچ موقت را بعد از سوئیچ بعنوان یک برنچ جدید سیو کنید ، با تعیین فایل میتوانید تنها فایل مد نظر را از کامیت به برنچ فعلی وارد کنید موقتا و از اطلاعات اون بهره ببرید

Git Diff

  • git diff : مشاهده تغییرات ورکینگ دایرکتوری با آخرین کامیت یا در صورت موجود بودن با آخرین استیج
  • git diff --staged : مشاهده تغییرات استیج با آخرین کامیت
  • git diff HEAD : مشاهده تغییرات ورکینگ دایرکتوری با هد (آخرین کامیت انجام شده)
  • git diff FILE : مشاهده تغییرات یک فایل خاص
  • git diff HASH HASH : مقایسه تغییرات 2 کامیت با یکدیگر
  • git diff -b : در لیست تغییرات اسپیس ها رو ایگنور میکنه
  • git diff -w : در لیست تغییرات خط های خالی رو ایگنور میکنه

Git Stash

  • git stash : ذخیره تغییرات در استش با توضیح عنوان آخرین کامیت
  • git stash -m : ذخیره تغییرات در استش با توضیح سفارشی
  • git stash list : لیست استش های ذخیره شده
  • git stash pop STASHNAME : بازگردانی اطلاعات استش به ورکینگ دایرکتوری و پاک کردن استش
  • git stash apply STASHNAME : بازگردانی اطلاعات استش به ورکینگ دایرکتوری بدون پاک کردن استش

Git Reset

بازگردانی به کامیت های قبل (تغییر هد پوینتر)

نکته مهم نکته : قبل از استفاده از reset حتما شناسه کامیت ها مهم خود را نگه دارید

  • git reset HASH --soft : Repo (Yes) Stage (No) Wdir (No) کاربرد بیشتر ایگنور کردن کامیت ها هست
  • git reset HASH --mixed (Default) : Repo (Yes) Stage (Yes) Wdir (No)
  • git reset HASH --hard : Repo (Yes) Stage (Yes) Wdir (Yes)