DevOps Beginner 20 мин • 13.10.2026 г.

Git и GitHub команди: Пълно практическо ръководство за ежедневието

Научете основните и по-редките команди в Git и GitHub, подредени от практическа гледна точка за всеки програмист и DevOps инженер.

Git и GitHub команди: Пълно практическо ръководство за ежедневието

Предварителни изисквания

  • Основна грамотност с команден ред / терминал

Когато става въпрос за работа с код, всеки програмист рано или късно се сблъсква с момента, в който трябва да синхронизира промените си, да оправи някой заплетан клон или просто да върне изгубена работа. Вместо да губим време в търсене из нета на точния синтаксис, нека съберем на едно място най-важните Git и GitHub команди – подредени логично от всекидневните задачи до по-специфичните ситуации.

В това ръководство ще разгледаме всичко, което ви трябва, за да работите уверено през терминала.


1. Всекидневни команди

Това е вашият основен работен цикъл: провери какво е сменено, подготви промените, запиши ги (commit) и ги изпрати към отдалеченото репо.

  • Състояние на репото
    Описание: Кои файлове са променени, кои са подготвени за запис.

    git status
  • Подготви всички промени
    Описание: Добавя всички нови и променени файлове в следващия запис.

    git add .
  • Запиши (commit)
    Описание: Създава запис с кратко описание на промяната.

    git commit -m "<описание на промяната>"
  • Подготви и запиши в една стъпка
    Описание: Работи само за вече следени файлове. Нови файлове не влизат.

    git commit -am "<описание>"
  • Изпрати към GitHub
    Описание: Качва локалните записи в отдалеченото репо.

    git push
  • Изтегли и слей промените
    Описание: Взима новото от GitHub и го слива в текущия клон.

    git pull
  • Изтегли с пренареждане
    Описание: Подрежда твоите записи върху чуждите вместо merge запис. Дава по-чиста история.

    git pull --rebase
  • Какво съм променил
    Описание: Показва промените, които още не са подготвени.

    git diff
  • Какво ще бъде записано
    Описание: Показва само подготвените промени.

    git diff --staged
  • История на записите
    Описание: Компактен списък с един ред на запис.

    git log --oneline

2. Нов проект към GitHub

Ако имате локална папка, която все още не е Git репо, първо създайте празно репо в GitHub (без README), след което изпълнете тази последователност.

  • Пълна последователност
    Описание: Замени адреса със своя от зеления бутон Code в GitHub. Може и SSH адрес: git@github.com:<потребител>/<репо>.git.

    # влез в папката на проекта
    cd <път/до/проекта>
    
    git init -b main
    git add .
    git commit -m "Първоначален запис"
    git remote add origin https://github.com/<потребител>/<репо>.git
    git push -u origin main
  • Същото с GitHub CLI в една команда
    Описание: Създава репото в GitHub, връзва го като origin и качва. Изисква предварително gh auth login. Смени --private с --public за публично репо.

    # след git init и първия commit
    gh repo create <име-на-репо> --private --source=. --remote=origin --push
  • Преди първия commit: добави .gitignore
    Описание: Така паролите, node_modules и временните файлове не влизат в репото. Файлът се пише ръчно, а това е пример за съдържание.

    printf "node_modules/\n.env\n*.log\n.DS_Store\n" > .gitignore

3. Съществуващ проект към GitHub

Ако папката вече е Git репо с история, а в GitHub е създадено празно репо, време е да ги свържете.

  • Свържи с GitHub и качи
    Описание: Преименува текущия клон на main и го качва заедно с цялата история.

    git remote add origin https://github.com/<потребител>/<репо>.git
    git branch -M main
    git push -u origin main
  • Вече има зададен remote с грешен адрес
    Описание: Ако git remote add върне грешка, че origin съществува, смени адреса му.

    git remote set-url origin https://github.com/<потребител>/<репо>.git
  • Провери към какво е свързано репото
    Описание: Показва адресите за теглене и изпращане.

    git remote -v
  • Качи и всички останали клонове
    Описание: Изпраща всички локални клонове наведнъж.

    git push -u origin --all
  • Качи и таговете
    Описание: Таговете не се качват с обикновения push.

    git push origin --tags
  • Изтегли чуждо репо
    Описание: Създава папка с цялото репо и история.

    git clone https://github.com/<потребител>/<репо>.git
  • Изтегли в папка с друго име
    Описание: Последният аргумент е името на локалната папка.

    git clone https://github.com/<потребител>/<репо>.git <име-на-папка>

4. Добавяне на документ или файл по-късно

Поставяте файл в папката на проекта и искате да го пратите към GitHub.

  • Един конкретен файл
    Описание: Подготвя, записва и качва само посочения файл.

    git add <файл.pdf>
    git commit -m "Добавен <файл.pdf>"
    git push
  • Цяла папка
    Описание: Включва всичко в папката, включително подпапките.

    git add <папка>/
    git commit -m "Добавена папка <папка>"
    git push
  • Няколко файла по шаблон
    Описание: Шаблонът е в кавички, за да го разчете Git, а не обвивката.

    git add "*.md"
    git commit -m "Добавени документи"
    git push
  • Подготви част от файла
    Описание: Показва промените на парчета и пита кои да влязат в записа.

    git add -p <файл>
  • Спри да следиш файл, но го остави на диска
    Описание: Полезно, когато файл е качен по грешка и трябва да влезе в .gitignore.

    git rm --cached <файл>
    git commit -m "Спрян за следене: <файл>"
    git push
  • Изтрий файл от репото и от диска
    Описание: Изтриването също трябва да се запише и качи.

    git rm <файл>
    git commit -m "Изтрит <файл>"
    git push
  • Преименувай или премести файл
    Описание: Git запазва историята на файла при преместване.

    git mv <старо-име> <ново-име>
    git commit -m "Преименуван файл"
    git push
  • Файл над 100 MB
    Описание: GitHub отказва единични файлове над 100 MB. Използвай Git LFS за големи файлове.

    git lfs install
    git lfs track "*.zip"
    git add .gitattributes
    git add <голям-файл.zip>
    git commit -m "Добавен голям файл през LFS"
    git push

5. Клонове

Работете в отделен клон и го сливайте едва когато всичко е тествано и готово.

  • Списък с клоновете
    Описание: Звездичка маркира текущия клон. С -vv се виждат и отдалечените връзки.

    git branch
    git branch -vv
  • Създай нов клон и премини в него

    git switch -c <име-на-клон>
  • Премини в съществуващ клон

    git switch <име-на-клон>
  • Слей клон в текущия
    Описание: Първо премини в клона, който приема промените, обикновено main.

    git switch main
    git merge <име-на-клон>
  • Качи нов клон към GitHub
    Описание: Първото качване връзва локалния клон с отдалечения.

    git push -u origin <име-на-клон>
  • Изтрий клон
    Описание: Малкото -d отказва, ако клонът не е слят. Първият ред е за локалния, вторият за GitHub.

    git branch -d <име-на-клон>
    git push origin --delete <име-на-клон>
  • Пренареди клона върху main
    Описание: Пренаписва записите на клона. Не го прави върху клон, който други вече са теглили.

    git switch <име-на-клон>
    git rebase main
  • Вземи един запис от друг клон
    Описание: Прилага само избрания запис в текущия клон.

    git cherry-pick <хеш-на-запис>
  • Преименувай текущия клон

    git branch -M <ново-име>

Може да ви е интересно още: Инсталиране на Opengist на bg с Docker и Docker Compose.

6. Отмяна и поправки

⚠️ Внимание: Някои от тези команди могат да изтрият работа без връзка назад. Винаги проверявайте състоянието с git status.

  • Махни файл от подготвените
    Описание: Файлът остава променен на диска, просто не влиза в записа.

    git restore --staged <файл>
  • Върни файл към последния запис
    Описание: Изхвърля неподготвените промени във файла.

    git restore <файл>
  • Поправи последния запис
    Описание: Променя съобщението или добавя забравени файлове. Не го прави след git push.

    git commit --amend -m "<ново съобщение>"
    
    # или само добави подготвените файлове, без смяна на съобщението
    git commit --amend --no-edit
  • Върни последния запис, но запази промените
    Описание: Записът се маха, а файловете остават подготвени.

    git reset --soft HEAD~1
  • Върни последния запис и изхвърли промените
    Описание: Необратимо за неподготвени и подготвени промени.

    git reset --hard HEAD~1
  • Отмени запис с нов запис
    Описание: Безопасният начин за вече качени записи: добавя запис, който обръща старите промени.

    git revert <хеш-на-запис>
  • Скрий промените временно (stash)
    Описание: Чисти работната папка, без да губиш работа. Удобно преди смяна на клон.

    git stash push -m "<бележка>"
    git stash list
    git stash pop
  • Изтрий неследените файлове
    Описание: Първо -n показва какво ще бъде изтрито. После същата команда с -f го изтрива.

    git clean -n
    git clean -fd
  • Върни изгубен запис
    Описание: Reflog пази къде е сочил HEAD. Помага след грешен reset --hard.

    git reflog
    git reset --hard <хеш-от-reflog>

7. Отдалечено репо и синхронизация

Взимане на промени и безопасно качване в екипна среда.

  • Свали промените без да ги сливаш
    Описание: Обновява информацията за отдалечените клонове, но не пипа твоите файлове.

    git fetch
  • Почисти изтритите отдалечени клонове
    Описание: Маха локалните препратки към клонове, които вече ги няма в GitHub.

    git fetch --prune
  • Принудително качване, но по-безопасно
    Описание: Нужно след rebase или amend на вече качен клон. Отказва, ако някой друг е качил междувременно.

    git push --force-with-lease
  • Синхронизирай fork с оригинала
    Описание: Добавяш оригиналното репо като upstream и го сливаш.

    git remote add upstream https://github.com/<оригинален-потребител>/<репо>.git
    git fetch upstream
    git switch main
    git merge upstream/main
    git push
  • Същото с GitHub CLI
    Описание: Обновява fork-а в GitHub и после тегли промените.

    gh repo sync <потребител>/<репо>
    git pull
  • Създай таг за версия
    Описание: Анотиран таг с описание, който се качва отделно.

    git tag -a v1.0.0 -m "Версия 1.0.0"
    git push origin v1.0.0

8. История и търсене

Как да разберете кой, кога и защо е променил определен ред от кода.

  • История с графика на клоновете

    git log --oneline --graph --decorate --all
  • История на един файл
    Описание: С --follow продължава и през преименуванията.

    git log --follow -p <файл>
  • Покажи един запис
    Описание: Съобщение и промени на конкретен запис.

    git show <хеш-на-запис>
  • Кой е променил реда
    Описание: Показва автор и запис за всеки ред на файла.

    git blame <файл>
  • Търси текст в проекта
    Описание: Търси в следените файлове.

    git grep "<текст>"
  • Записи по автор или период

    git log --author="<име>" --since="2 weeks ago"
  • Намери записа, който е счупил кода
    Описание: Двоично търсене. След всяка проверка маркираш записа като добър или лош.

    git bisect start
    git bisect bad
    git bisect good <хеш-на-добър-запис>
    
    # когато приключиш
    git bisect reset

9. Настройка и вход в GitHub

Тези стъпки се правят обикновено веднъж на новата машина. Имайте предвид, че GitHub вече не приема стандартна парола за HTTPS връзка през терминала, а изисква персонален токен, SSH ключ или вход през GitHub CLI.

  • Име и имейл за записите
    Описание: Използвай имейла от GitHub акаунта, за да се свързват записите с профила ти.

    git config --global user.name "<Име Фамилия>"
    git config --global user.email "<имейл>"
  • main като начален клон
    Описание: Новите репа ще започват с main вместо с master.

    git config --global init.defaultBranch main
  • Вход чрез GitHub CLI
    Описание: Най-простият начин за HTTPS. Следвай указанията в терминала.

    gh auth login
    gh auth setup-git
  • SSH ключ
    Описание: Генерира ключ и показва публичната му част. Постави я в GitHub (Settings -> SSH and GPG keys). После тествай.

    ssh-keygen -t ed25519 -C "<имейл>"
    cat ~/.ssh/id_ed25519.pub
    ssh -T git@github.com
  • Преглед на настройките

    git config --list --show-origin
  • Краища на редовете в Windows
    Описание: Само за Windows. Избягва предупрежденията за LF и CRLF.

    git config --global core.autocrlf true
  • Псевдоними за по-кратко писане
    Описание: След това git st е същото като git status.

    git config --global alias.st status
    git config --global alias.lg "log --oneline --graph --decorate --all"

10. GitHub CLI (gh)

Работа с GitHub директно от терминала, без да се налага да отваряте браузъра.

  • Отвори репото в браузъра

    gh repo view --web
  • Pull request от текущия клон
    Описание: --fill взима заглавието и описанието от записите.

    gh pr create --fill
  • Списък и преглед на pull requests

    gh pr list
    gh pr view <номер>
    gh pr checkout <номер>
  • Слей pull request
    Описание: --squash събира всички записи в един. Другите варианти са --merge и --rebase.

    gh pr merge <номер> --squash --delete-branch
  • Задачи (issues)

    gh issue list
    gh issue create --title "<заглавие>" --body "<описание>"
  • Публикувай версия (release)
    Описание: Създава release от тага и генерира бележки от записите.

    gh release create v1.0.0 --generate-notes
  • Клонирай свое репо по име

    gh repo clone <потребител>/<репо>
  • Изтрий репо в GitHub
    Описание: Необратимо. gh ще поиска потвърждение и разрешение delete_repo.

    gh repo delete <потребител>/<репо>

Техническа бележка: Командите git switch и git restore изискват Git версия 2.23 или по-нова, а git init -b main изисква 2.28+. Можете да проверите своята версия с командата git --version.