همهی دستورهای دورهی 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~2 | commit دوم از آخر |
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~1 | commit را بردار، تغییرها staged |
git reset HEAD~1 | commit را بردار، تغییرها در پوشهی کاری |
git reset --hard HEAD~1 | commit و تغییرها را دور بریز ⚠ |
git revert commit | commit مشترک را خنثی کن (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_global | ignore سراسری |
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 diff | diff ترکیبی 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~3 | rebase تعاملی ۳ commit آخر |
(pick / reword / squash / fixup / drop) | دستورهای فهرست تعاملی |
git rebase --continue | بعد از حل conflict ادامه |
git rebase --abort | لغو و برگشت |
git rebase --skip | این commit را رها کن |
git commit --fixup commit | commit اصلاحی |
git rebase -i --autosquash HEAD~5 | fixup ها را خودکار جابهجا کن |
git push --force-with-lease | push بعد از 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 -v | remote ها |
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_ed25519 | agent و افزودن کلید |
ssh -T git@github.com | آزمایش اتصال |
ssh -vT git@github.com | آزمایش با جزئیات |
git remote set-url origin git@github.com:USER/REPO.git | HTTPS ← SSH |
git ls-remote origin | آزمایش remote |
Host github.com / Hostname ssh.github.com / Port 443 | SSH از پورت ۴۴۳ (در ~/.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/x | commit های 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 .githooks | hook های داخل مخزن (قابلاشتراک) |
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_dispatch | trigger ها |
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-found | commit های بیصاحب |
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 | نگاه کلی |
دستوری با این عبارت پیدا نشد.