amarao: (Default)
Пушить нельзя, а коммитить локально можно. В очередной раз промахнувшись бранчем и вынужденный делать git branch -D master, я набрался attention span и сделал прекоммит хук, чтобы такое запретить: .git/hooks/pre-commit:

#!/bin/sh
branch="$(git rev-parse --abbrev-ref HEAD)"
if [ "$branch" = "master" ]; then
echo "Direct commits to master branch are not allowed."
exit 1
fi
amarao: (Default)

Проблема: у меня коммиты подряд, которые удаляли кучу строк в куче файлов, и вот я делаю revert и не могу, конфликт (не смотря на линейную историю).

Мне все говорили "делай руками", но я ленивая задница, и ...

git show 458d9d0a7b | patch --fuzz=999 --no-backup-if-mismatch  -p1 -R

Сработало. Строчки не совсем там, где я ожидал, но в нужных файлах в нужном порядке. Файлов много, они конфиги, так что это чистый win.

amarao: (Default)
Одно из мест обитания сверхестественных существ, это git. В наш быт вошли заклинания призыва демонов, которые быстро делают то, что нужно, когда нужно. У некоторых неопытных пользователей гита это может вызвать иллюзию полного контроля над демонами, но это не так.

Достаточно сделать git stash pop не в том бранче, чтобы демоны вышли из под контроля. Наивные пользователи могут пытаться использовать всё более мрачные заклинания, но они будут приводить к всё большей и большей потери контроля над демонами.

Единственным решением в этой ситуации (кроме "ничего не делать и вызвать git-экзорциста") может быть только планомерное закрытие ошиьбочных порталов в git, чтобы перевести ситуацию из аварийной в хроническую. Для этого очень важно знать, какие именно порталы открыты. Например, в случае с неудачным git stash pop, ключевым инсайтом должно быть то, что апокалипсис происходит в stage/work, а history и stash (! это важно!) не затронуты. Таким образом, достаточно всего лишь аннигилировать stage и work, сохранив нетронутой history и stage. Ошибочные попытки общения с демонами истории могут лишь эскалировать ситуацию до развёрстывания малых врат Гита. А если после этого сделать push --force, то это откроет и Большие Врата Гита, и как известно, в мире есть всего 3 человека (вместе образующие 1.3 человека, если считать по органам), способные восстановить мир после открытия Больших Врат Гита.

Ряд встроенных защит от особо опасных демонических проявлений позволяет избежать усложнённой ситуации (когда нужно спасать локальные изменения - stash apply отказывается открываться, если они есть). Я, правда, не знаю, что происходит, если есть staged. Возможно, необратимая гибель staged.

Upd: В моём случае проблема того, что я писал не в том бранче (а изменений много, и они хорошие) осталась, но мне удалось локализовать демонические проблемы на том, что у меня не проходит cherry-pick из одного бранча в другой, а это весьма комфортная ситуация (по сравнению с малым гитопокалипсисом сломанного stash pop).
amarao: (Default)

СЯУ что git умеет делать диффы в своём стиле между произвольными двумя каталогами. .git не обязателен.

git diff --no-index source dest

Profile

amarao: (Default)
amarao

August 2025

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 4th, 2025 01:44 pm
Powered by Dreamwidth Studios