Git на каждый день

Squash, upstream, mirrors, смена origin, force push — что реально нужно в работе.


Squash коммитов

Когда у вас 10 коммитов “fix typo”, “fix again”, “WIP” — squash в один чистый.

git rebase -i HEAD~10

После сохранения откроется второй редактор — для сообщения объединённого коммита. Отредактируйте и сохраните.

Если коммиты уже запушены

Понадобится force push (см. ниже). Не делайте squash в общих ветках, где работают другие.

При PR можно squash merge через GitHub UI — проще и безопаснее.


Upstream

Для fork’ов: origin = ваш fork, upstream = оригинал.

git remote add upstream https://github.com/original/repo.git
git fetch upstream
git rebase upstream/main   # актуализировать поверх оригинала

Mirrors

Зеркало репозитория на другой хостинг:

git clone --mirror https://github.com/user/repo.git
cd repo.git
git remote set-url --push origin https://gitlab.com/user/repo.git
git push --mirror

Смена origin

git remote set-url origin git@github.com:user/new-repo.git
git push -u origin main

Untrack файла, который уже в репо

git rm --cached file.txt   # удалить из git, оставить на диске
echo "file.txt" >> .gitignore
git commit -m "stop tracking file.txt"

.gitignore не работает

.gitignore не спасёт

Если файл уже отслеживается — .gitignore не поможет. Сначала git rm --cached, потом .gitignore.


Force push после rebase

git push --force-with-lease origin main

Связанные статьи

  • — сад на Quartz, деплой через git
  • — CNAME для кастомного домена
  • — все проекты на GitHub

Связанные


← mrgnl