Как да избегнем често срещаните проблеми с GitHub

Защо дори опитни хора постоянно имат „драми“ с Git (и как да ги спреш)
Ако работиш активно с Git и GitHub, почти сигурно ти се е случвало:
rejected (fetch first)- „remote contains work that you do not have locally“
- merge конфликти в
README.md mainvsmaster- „ама аз само една картинка добавих…“
И в един момент си казваш:
„Как е възможно, след толкова репота, пак да се спъвам?“
Отговорът е прост и успокояващ:
Проблемът не е в теб. Проблемът е в начина, по който Git работи.
Истината за Git (която рядко се казва)
Git е:
- мощен
- гъвкав
- но НЕ е интуитивен
Той не е създаден да бъде „user-friendly“, а да пази история.
Git не се интересува какво ти смяташ за логично — интересува го дали историята е линейна и последователна.
Затова:
- хора с 2 репота „нямат проблеми“
- хора с 20, 50, 100+ репота постоянно се сблъскват с edge cases
Това е нормално.
Най-честият реален проблем (90% от случаите)
Сценарият изглежда така:
- Repo-то съществува в GitHub
- Правиш промяна локално → commit
- Междувременно:
- редактираш нещо през GitHub UI
- или GitHub е добавил файл
- Опитваш
git push - Git отказва
Git не казва „грешка“.
Git казва:
„Първо се синхронизирайте.“
Защо това се случва толкова често
Ако:
- работиш и в WSL, и в Git Bash
- използваш VS Code
- понякога редактираш през GitHub UI
- имаш много репота
👉 ти гарантирано ще срещаш тези ситуации.
И това не е грешка.
Това е реалният живот с Git.
Златното правило (което решава 70% от проблемите)
❗ Избери ЕДИН workflow
Вариант А (най-чистият)
❌ Не редактираш нищо през GitHub UI
✔️ Всичко: локално → commit → push
Вариант Б (ако пипаш GitHub UI)
✔️ ВИНАГИ преди push:
git pull --rebase
Без изключения.
Най-важната команда, която трябва да използваш
git pull --rebase
Защо --rebase?
- не прави излишни merge commit-и
- историята остава чиста
- точно това искаш за лични / малки / средни проекти
Един алиас, който спасява нерви
Добави в .bashrc:
alias gps='git pull --rebase && git push'
После просто:
gps
Без мислене.
Без „дали първо да pull-на“.
Без драми.
Минимален „anti-drama“ workflow
Преди push:
git status
git log --oneline --max-count=3
Ако последният commit е твой → push.
Какво НЕ трябва да правиш (освен ако знаеш защо)
git push --force
--force не е зло, но е:
- опасно
- лесно за злоупотреба
- почти никога не е нужно за лични проекти
Един скрит, но много важен проблем
❗ Не работи по един и същ repo от:
- WSL
- Git Bash
- PowerShell
- VS Code
едновременно
Избери среда → завърши промяната → commit → push.
Истината, която трябва да си запомниш
Хората, които са „добри с Git“:
- не правят по-малко грешки
- просто разпознават проблема по-бързо
- не паникьосват
- не force-push-ват
Ако вече имаш десетки репота — ти си в тази категория.
TL;DR (за bookmark)
git pull --rebase
git push
И:
- един workflow
- един alias
- една среда
Заключение
GitHub не е „счупен“.
Ти не си „некомпетентен“.
Git просто е инструмент, който наказва несинхронизиран workflow.
След като го приемеш — всичко става спокойно, предвидимо и контролируемо.
📌 Практически завършек: Git командите, които реално ти трябват
Това е минималният, доказано работещ набор, който покрива 95% от ежедневната работа с Git и GitHub.
🔹 1. Проверка на текущото състояние
git status
Показва:
- кои файлове са променени
- кои са добавени за commit
- на кой branch си
➡️ Първата команда, която винаги пускаш.
🔹 2. Добавяне на файловете
git add .
Добавя всички промени към следващия commit.
➡️ Използва се, когато си сигурен какво качваш.
🔹 3. Commit (запис в историята)
git commit -m "Кратко и ясно описание"
Създава commit със смислено съобщение.
➡️ Commit ≠ push
Commit е локален запис, още не е в GitHub.
🔹 4. Проверка на последните commit-и
git log --oneline --max-count=3
Показва последните 3 commit-а в кратък вид.
➡️ Бърза проверка „какво точно ще push-на“.
🔹 5. Синхронизация с GitHub (най-важната стъпка)
git pull --rebase
- взима промените от GitHub
- подрежда твоите commit-и след тях
- пази историята чиста
➡️ Това предотвратява 70% от проблемите.
🔹 6. Качване в GitHub
git push
Качва локалните commit-и в remote репозиторито.
➡️ Ако преди това си направил pull --rebase, push-ът е безопасен.
⭐ Комбиниран „анти-драма“ вариант (препоръчителен)
Алиас:
alias gps='git pull --rebase && git push'
Използване:
gps
➡️ Един ред, нула мислене, минимален риск.
🆕 При нов проект (само веднъж)
git init
Създава локален Git repo.
git branch -M main
Задава основен branch main.
git remote add origin [email protected]:USERNAME/PROJECT.git
Свързва локалния проект с GitHub repo.
git push -u origin main
Първоначален push + запомняне на remote-а.
❌ Команда, която НЕ ползваш без причина
git push --force
➡️ Използва се само ако знаеш точно защо.
За лични и малки проекти почти никога не е нужна.
🧠 Финално правило за спокойствие
Ако си пипал нещо:
- в GitHub UI
- от друга машина
- от друга среда (WSL / Git Bash / VS Code)
👉 винаги първо:
git pull --rebase
🏁 Заключителна мисъл
Git не изисква „гениалност“.
Изисква последователност.
С тези команди, в този ред, Git спира да бъде проблем
и става просто инструмент.



