رفتن به محتوا
LoopX

دستورات Git: برگه‌ی تقلب کامل

همه‌ی دستورهای دوره‌ی Git و GitHub در یک صفحه: ۲۰۴ دستور از ۲۰ درس، به ترتیب درس‌ها. هر دستور در درس خودش با خروجی واقعی اجرا و توضیح داده شده است؛ روی اسم درس بزن تا توضیح کامل و مثال‌ها را ببینی.

مبانی

Git چیست؟

دستورکاری که می‌کند
git --versionنسخه‌ی Git (و آزمایش نصب‌بودن)
command -v gitمسیر برنامه‌ی git
git initپوشه‌ی فعلی را مخزن کن (.git می‌سازد)
git clone مسیر-یا-آدرسکپی کامل یک مخزن با تاریخچه
git log --onelineتاریخچه‌ی کوتاه
git helpفهرست دستورهای رایج
git help دستور / git دستور -hراهنمای کامل / خلاصه‌ی یک دستور
git cat-file -p HEADمحتوای خود شیء commit (نگاه پشت پرده)

نصب و تنظیم اولیه

دستورکاری که می‌کند
git config --global user.name "نام"نام نویسنده
git config --global user.email "ایمیل"ایمیل نویسنده
git config --global init.defaultBranch mainشاخه‌ی اول مخزن‌های تازه
git config --global core.editor nanoویرایشگر پیام commit
git config --global alias.st "status -sb"میان‌بر
git config --list --show-originهمه‌ی تنظیمات با فایل مبدأ
git config کلیدخواندن یک مقدار
git config --global --unset کلیدحذف یک تنظیم
git config --global --editویرایش مستقیم ~/.gitconfig
git config --global includeIf."gitdir:~/work/".path "~/.gitconfig-work"تنظیم جدا برای یک پوشه

اولین مخزن و commit

دستورکاری که می‌کند
git initپوشه را مخزن کن
git status / git status -sوضعیت کامل / خلاصه
git add فایلآماده‌کردن یک فایل
git add -Aآماده‌کردن همه (جدید، ویرایش، حذف)
git add -uفقط فایل‌های شناخته‌شده
git add -pانتخاب تغییرها تکه‌تکه
git commit -m "پیام"ثبت با پیام
git commit -am "پیام"add شناخته‌شده‌ها + commit
git mv قدیم جدید / git rm فایلتغییر نام / حذف و staged
git ls-filesفایل‌های دنبال‌شده

تاریخچه و تفاوت‌ها

دستورکاری که می‌کند
git log --oneline --graph --allگراف کوتاه همه‌ی شاخه‌ها
git log -p -n 3سه commit آخر با تغییر کامل
git log --author=نام --since="1 week ago"فیلتر نویسنده و زمان
git log -S"متن"commit هایی که آن متن را اضافه/حذف کرده‌اند
git log -- فایلتاریخچه‌ی یک فایل
git show HEAD~2commit دوم از آخر
git show commit:فایلفایل در آن commit
git diff / git diff --staged / git diff HEADسه مقایسه‌ی اصلی
git diff قدیم جدید --statتفاوت دو commit، خلاصه
git blame -L 4,9 فایلنویسنده‌ی خط‌های ۴ تا ۹
git shortlog -sn HEADتعداد commit هر نفر

برگرداندن تغییرات

دستورکاری که می‌کند
git restore فایلپوشه‌ی کاری را از آخرین commit برگردان ⚠
git restore --staged فایلاز staging بیرون بیاور
git restore --source=HEAD~2 فایلفایل را از دو commit قبل بیاور
git commit --amend -m "پیام"پیام آخرین commit را عوض کن
git add فایل && git commit --amend --no-editفایل فراموش‌شده را به آخرین commit اضافه کن
git reset --soft HEAD~1commit را بردار، تغییرها staged
git reset HEAD~1commit را بردار، تغییرها در پوشه‌ی کاری
git reset --hard HEAD~1commit و تغییرها را دور بریز ⚠
git revert commitcommit مشترک را خنثی کن (commit جدید)
git reflogجابه‌جایی‌های HEAD؛ نجات commit گم‌شده
git clean -nd / git clean -fdفایل‌های untracked: نمایش / حذف ⚠

فایل .gitignore

دستورکاری که می‌کند
echo "node_modules/" >> .gitignoreیک الگو اضافه کن
git check-ignore -v مسیرکدام قاعده این را نادیده می‌گیرد؟
git status -s --ignoredنادیده‌ها را هم نشان بده
git rm --cached فایلاز ردیابی دربیاور، روی دیسک بماند
git rm -r --cached پوشههمان برای پوشه
build/* و !build/README.mdاستثنا داخل پوشه‌ی ignore‌شده
.env و !.env.exampleرمز ignore، نمونه‌اش tracked
touch پوشه/.gitkeepنگه‌داشتن پوشه‌ی خالی
git config --global core.excludesFile ~/.gitignore_globalignore سراسری
git add -f فایلافزودن اجباری فایل ignore‌شده

شاخه‌ها

branch و merge

دستورکاری که می‌کند
git branch / git branch -vفهرست شاخه‌ها
git switch -c feature/xساخت و رفتن
git switch main / git switch -رفتن به شاخه / قبلی
git merge feature/xادغام در شاخه‌ی فعلی
git merge --no-ff feature/xهمیشه commit ادغام
git branch -d feature/xحذف امن
git branch -D feature/xحذف اجباری ⚠
git branch -m قدیم جدیدتغییر نام
git branch --merged / --no-mergedادغام‌شده‌ها / نشده‌ها
git log --oneline --graph --allگراف همه‌ی شاخه‌ها
git switch --detach commitنگاه به یک commit (detached)

حل conflict

دستورکاری که می‌کند
git merge شاخهشروع ادغام
git statusفایل‌های unmerged را ببین
git diffdiff ترکیبی conflict
(ویرایش فایل و حذف علامت‌ها)نسخه‌ی نهایی
git add فایلعلامت: حل شد
git commit / git merge --continueپایان ادغام
git merge --abortلغو ادغام
git checkout --ours فایل / --theirsنسخه‌ی یک طرف
git config merge.conflictStyle zdiff3نمایش base
git diff --checkعلامت‌های جامانده
git config rerere.enabled trueیادآور حل‌ها

rebase

دستورکاری که می‌کند
git rebase mainشاخه‌ی فعلی را روی main بازپخش کن
git rebase -i HEAD~3rebase تعاملی ۳ commit آخر
(pick / reword / squash / fixup / drop)دستورهای فهرست تعاملی
git rebase --continueبعد از حل conflict ادامه
git rebase --abortلغو و برگشت
git rebase --skipاین commit را رها کن
git commit --fixup commitcommit اصلاحی
git rebase -i --autosquash HEAD~5fixup ها را خودکار جابه‌جا کن
git push --force-with-leasepush بعد از rebase (شاخه‌ی شخصی)
git reset --hard ORIG_HEADبرگشت از rebase اشتباه

stash

دستورکاری که می‌کند
git stash / git stash push -m "پیام"کنار گذاشتن (با نام)
git stash -uبا فایل‌های جدید
git stash push -- فایل / git stash push -pفقط بخشی
git stash listفهرست کشو
git stash show -p stash@{1}دیدن تغییر یک stash
git stash popبرگردان و بردار
git stash apply stash@{1}برگردان و نگه دار
git stash drop / git stash clearحذف یکی / همه
git stash branch نامساخت شاخه از stash

tag و نسخه‌گذاری

دستورکاری که می‌کند
git tag -a v1.0.0 -m "پیام"tag annotated روی commit فعلی
git tag -a v0.9.0 commit -m "پیام"tag روی commit دیگر
git tag -l "v1.*" --sort=-v:refnameفهرست نسخه‌ای
git show v1.0.0جزئیات tag
git describeنزدیک‌ترین tag و فاصله
git switch -c hotfix/1.0.1 v1.0.0شاخه از یک نسخه
git push origin v1.0.0 / git push --tagsفرستادن tag
git tag -d v1.0.0حذف محلی
git push origin --delete v1.0.0حذف از سرور
git log v1.0.0..v1.1.0 --onelineتغییرهای بین دو نسخه

کار با GitHub

مخزن راه دور

دستورکاری که می‌کند
git clone آدرس [پوشه]کپی کامل
git remote -vremote ها
git remote add origin آدرسافزودن remote
git push -u origin mainارسال و تنظیم upstream
git push / git pullارسال / دریافت
git fetchدریافت بدون ادغام
git log main..origin/mainآنچه سرور دارد و من ندارم
git pull --rebaseدریافت و بازپخش commit های محلی
git branch -vvشاخه‌ها با upstream
git push origin --delete شاخهحذف شاخه‌ی راه دور
git fetch --pruneپاک‌کردن شاخه‌های مرده
git remote set-url origin آدرسعوض‌کردن آدرس

اتصال به GitHub با SSH

دستورکاری که می‌کند
ssh-keygen -t ed25519 -C "ایمیل"ساخت جفت کلید
cat ~/.ssh/id_ed25519.pubکلید عمومی (برای GitHub)
eval "$(ssh-agent -s)" ; ssh-add ~/.ssh/id_ed25519agent و افزودن کلید
ssh -T git@github.comآزمایش اتصال
ssh -vT git@github.comآزمایش با جزئیات
git remote set-url origin git@github.com:USER/REPO.gitHTTPS ← SSH
git ls-remote originآزمایش remote
Host github.com / Hostname ssh.github.com / Port 443SSH از پورت ۴۴۳ (در ~/.ssh/config)
chmod 600 ~/.ssh/id_ed25519دسترسی درست کلید خصوصی

کار با GitHub

دستورکاری که می‌کند
gh auth loginورود gh به حساب (یک‌بار)
gh repo create نام --private --source=. --pushساخت مخزن خصوصی از پوشه‌ی فعلی
git branch -M mainتغییر نام شاخه‌ی فعلی به main
git remote add origin آدرساتصال به مخزن
git push -u origin mainارسال و upstream
git pull --allow-unrelated-historiesادغام دو تاریخچه‌ی بی‌ارتباط (با احتیاط)
gh issue create --title "..." --body "..."ساخت Issue
gh issue list / gh issue close 12فهرست / بستن
git log --grep="#12"commit های مربوط به Issue 12
Fixes #12بستن خودکار Issue با رسیدن commit به شاخه‌ی پیش‌فرض

Pull Request و بازبینی کد

دستورکاری که می‌کند
git push -u origin feature/xارسال شاخه‌ی ویژگی (برای PR)
git diff main...origin/feature/x«Files changed» (سه‌نقطه‌ای)
git log --oneline main..origin/feature/xcommit های PR
git remote add upstream آدرسپروژه‌ی اصلی (در fork)
git fetch upstream && git merge --ff-only upstream/mainهمگام‌سازی fork
git fetch origin pull/N/head:pr-Nگرفتن PR (GitHub)
gh pr create --fill --reviewer نامساخت PR (نمونه)
gh pr checkout Nگرفتن PR (نمونه)
gh pr merge N --squash --delete-branchادغام با squash (نمونه)
git merge origin/main (در شاخه‌ی PR)رفع conflict PR

روش‌های کار تیمی

دستورکاری که می‌کند
git commit -m "feat(cart): add coupon codes"پیام Conventional Commit
feat! یا BREAKING CHANGE:تغییر ناسازگار (MAJOR)
git log --grep="^feat"فقط commit های ویژگی
git config core.hooksPath .githookshook های داخل مخزن (قابل‌اشتراک)
git commit --no-verifyدور زدن hook ها (اضطرار)
git switch -c feature/123-نامشاخه با قرارداد
git commit -S / git log --show-signatureامضا و تأیید
git config receive.denyNonFastForwards true(سرور) ممنوعیت force push
.github/CODEOWNERSصاحب کد هر مسیر

حرفه‌ای

GitHub Actions

دستورکاری که می‌کند
.github/workflows/ci.ymlمحل فایل workflow
on: push / pull_request / schedule / workflow_dispatchtrigger ها
runs-on: ubuntu-latestنوع runner
uses: actions/checkout@v4گرفتن کد مخزن
run: دستوراجرای دستور shell
needs: [test]ترتیب job ها
strategy.matrix.python: ["3.11", "3.12"]تکثیر job
${{ secrets.NAME }} / ${{ vars.NAME }}secret / متغیر
env: TITLE: ${{ ... }} ← "$TITLE"جلوگیری از injection
actionlintبررسی فایل‌های workflow قبل از push
gh run list / view --log-failed / rerun --failedمدیریت اجراها (نمونه)

نجات و ابزارهای پیشرفته

دستورکاری که می‌کند
git reflogدفترچه‌ی جابه‌جایی‌های HEAD
git branch نام هشبرگرداندن شاخه‌ی پاک‌شده
git reset --hard 'HEAD@{1}'برگشت از reset اشتباه
git fsck --lost-foundcommit های بی‌صاحب
git cherry-pick -x هشکپی یک commit با یادداشت مبدأ
git cherry-pick --continue / --abortبعد از conflict
git bisect start بد خوبشروع جست‌وجوی commit خراب
git bisect good / bad / skipنتیجه‌ی commit فعلی
git bisect run ./test.shجست‌وجوی خودکار
git bisect resetپایان و بازگشت به شاخه‌ی اول

پشت پرده‌ی Git

دستورکاری که می‌کند
git cat-file -t / -s / -p شیءنوع / اندازه / محتوا
git cat-file -p 'HEAD^{tree}'tree ریشه‌ی commit فعلی
git cat-file -p HEAD:مسیرمحتوای فایل در commit
git ls-tree [-r] HEADفهرست محتوای tree
git ls-files --stageمحتوای index
echo متن | git hash-object [-w] --stdinشناسه (و نوشتن) یک blob
git write-tree / git commit-treeساخت tree و commit
git update-ref refs/heads/main commitبرچسب شاخه
git for-each-refهمه‌ی ref ها
git count-objects -vH / git gcآمار شیء‌ها / بسته‌بندی
git fsckبررسی سلامت

پروژه: شبیه‌سازی کار تیمی

دستورکاری که می‌کند
git switch -c feature/نامشاخه‌ی ویژگی
git push -u origin feature/نامارسال و upstream
git diff main...origin/feature/نامFiles changed (PR)
git merge origin/main (در شاخه‌ی PR)رفع conflict PR
git merge --squash / --no-ffمعادل Squash / Merge commit
git tag -a v1.0.0 -m "..." && git push origin v1.0.0انتشار
git switch -c release/1.0 v1.0.0شاخه‌ی انتشار
git cherry-pick -x هشbackport رفع باگ
git reflog → git branch نام هشنجات شاخه‌ی پاک‌شده
git bisect run ./test.shیافتن commit خراب
git log --oneline --graph --all --decorateنگاه کلی