Git: держать нить.
Большой рабочий список: от первой ветки до rebase, конфликтов, откатов и аккуратной синхронизации с командой.
Ориентация
git statusПокажет текущую ветку, изменённые и неотслеживаемые файлы.
git log --oneline --graph -12Компактная история последних коммитов с ветвлениями.
git diffИзменения, ещё не добавленные в индекс.
git diff --stagedТо, что попадёт в следующий коммит.
Ветки: создать и сменить
git branch --allСписок локальных и удалённых веток; текущая отмечена звёздочкой.
git switch mainПерейти на существующую локальную ветку.
git switch -c feature/nameСоздать ветку от текущего коммита и сразу перейти в неё.
git switch -c feature/name origin/mainСоздать новую ветку от актуальной удалённой main.
git switch --track origin/feature/nameСоздать локальную ветку, отслеживающую уже существующую удалённую.
git branch -m old-name new-nameПереименовать локальную ветку.
git branch -d feature/nameУдалить уже слитую локальную ветку. Git откажется, если коммиты ещё не слиты.
Удалённый репозиторий
git remote -vПоказать адреса подключённых удалённых репозиториев.
git fetch --pruneЗагрузить изменения с сервера, не меняя рабочие файлы; убрать ссылки на удалённые ветки.
git pull --ff-onlyБезопасно подтянуть изменения, только если возможен простой fast-forward.
git push -u origin feature/nameОтправить новую ветку и запомнить удалённый upstream.
git push origin --delete feature/nameУдалить удалённую ветку после merge.
git ls-remote --heads originПосмотреть ветки на сервере без изменения локального репозитория.
Влить изменения: merge
git switch mainПерейти на ветку, в которую нужно добавить работу.
git pull --ff-onlyСначала обновить её из удалённого репозитория.
git merge --no-ff feature/nameВлить feature-ветку отдельным merge-коммитом — история сохраняет контекст задачи.
git merge --abortОтменить незавершённое слияние и вернуться к состоянию до него.
git log --oneline --graph --allПроверить, как merge выглядит в общей истории.
Обновить ветку: rebase
git fetch originСначала получить свежую историю, не меняя рабочую ветку.
git switch feature/nameПерейти в ветку, которую нужно обновить.
git rebase origin/mainПеренести собственные коммиты поверх актуальной main. Удобно перед pull request.
git rebase -i HEAD~3Интерактивно переупорядочить, объединить или переименовать последние три локальных коммита.
git rebase --continueПродолжить после разрешения конфликта и git add исправленных файлов.
git rebase --skipПропустить текущий конфликтующий коммит, только если он больше не нужен.
git rebase --abortПолностью отменить rebase и вернуться к точке его старта.
Конфликты
git statusПокажет файлы с конфликтами и следующий ожидаемый шаг.
git diff --name-only --diff-filter=UВывести только файлы, которые требуют ручного разрешения.
git add path/to/fileОтметить конфликт в файле как решённый после правки.
git checkout --ours path/to/fileПри merge оставить версию текущей ветки. Проверяйте результат перед git add.
git checkout --theirs path/to/fileПри merge взять версию вливаемой ветки. Во время rebase значения ours/theirs меняются местами — надёжнее править вручную.
Сохранить работу
git add path/to/fileДобавить конкретный файл в следующий коммит.
git commit -m "Короткое действие"Зафиксировать подготовленные изменения.
git stash push -m "wip: описание"Временно убрать незавершённую работу из дерева.
git stash popВернуть последнюю отложенную работу обратно.
Поправить и откатить
git restore path/to/fileОтменить незастейдженные изменения файла.
git restore --staged path/to/fileУбрать файл из индекса, сохранив изменения в рабочей копии.
git commit --amend --no-editДобавить забытый стейдженный файл в последний коммит.
git revert commit-shaСоздать новый коммит, отменяющий изменения указанного. Безопасный способ для уже опубликованной истории.
git reflogЖурнал перемещений HEAD; помогает найти коммит, если ветка ушла не туда.
git reset --soft HEAD~1Убрать последний локальный коммит, но оставить все его изменения подготовленными к коммиту.