Git: как внести изменения в коммит, как откатить коммит

Ситуация 1: коммит уже сделан, но пуш ещё НЕ сделан. Обнаружилось что в предыдущий коммит нужно добавить какие-то правки, или что-то убрать из него например. Можно сбросить индекс для последнего коммита в текущей рабочей версии вот так
git reset --soft HEAD^
В таком варианте все изменения в файлах сохранятся (их покажет git status), будет сброшен только последний коммит. Теперь поправим все что нужно и закоммитим все снова, с новым комментарием.
Ситуация 2: кривой коммит сделан и уже отправлен на удаленный репозиторий (после push уже). Коммит этот надо откатить. Можно вообще-то исправить и закоммитить исправления, но мы допустим хотим просто полностью убрать этот кривой коммит чем быстрее тем лучше. Например коммит был сделан в неправильную ветку по ошибке.
# смотрим лог (%h покажет нам хэш коммита в логе)
git log -20 --pretty='%h %an %ar %s'
# делаем коммит с откатом 12f42c8 - это пример хэша
git revert 12f42c8
# пушим этот коммит
git push
Теперь в логе увидим сначала наш кривой коммит, а потом коммит с его (плохого коммита) откатом. См. git help revert

Шпаргалка по PostgreSQL

Начал разбираться с postgre, по этому случаю какое-то время буду вести эту шпору. Поскольку я только начинаю разбираться, некоторые из решений наверняка будут неоптимальными или неполными, такое возможно. Я наивно полагал что postgre сильно похож на mysql, но выяснилось что это в общем-то не совсем так. Буду писать о PostgreSQL версии 9.2+.
  1. Смотрим с какой версией postgre имеем дело
    psql --version
    
  2. Подключаемся к выбранной БД из консоли
    psql -d db_name -U user_name
    
  3. Переключиться на выбранную бд в текущем сеансе (curent_db=# - приглашение консоли PostgreSQL, db_name - бд, на которую переключаемся)
    curent_db=# \c db_name
    
  4. Показать все таблицы в текущей бд (аналог show tables в mysql)
    curent_db=# \dt
    
  5. Показать структуру выбранной таблицы (аналог desc table_name в mysql)
    curent_db=# \d+ table_name
    
  6. Показать список доступных бд (аналог show databases в mysql)
    curent_db=# \l
    
  7. Посмотреть запрос воспроизводящий структуру таблицы (аналог show create table в mysql). Как я понял (либо не нашел пока) аналога в postgre нет. Но все же вынуть такой запрос можно, правда уже другой утилитой. По сути это будет полный дамп структуры выбранной таблицы.
    pg_dump -b db_name -U user_name -t table_name -s
    
  8. Создать дамп бд и восстановить бд из дампа (см. ссылку)
    pg_dump db_name > dump_file.sql
    psql db_name < dump_file.sql
    # восстанавливаем из tar
    pg_restore -U user -h localhost -d db_name db_name.tar 
    
  9. Создаем новую БД
    create database dbname encoding 'utf8';
    
  10. Восстанавливаем бинарный дамп БД
    pg_restore -c -d db_name dump_file.dump
    
  11. Посмотреть список всех сиквенсов в бд (sequence)
    \ds
    # или
    \ds+
    
  12. Посмотреть состояние сиквенса (sequence)
    \d sequence_name
    # или
    \d+ sequence_name
    
  13. Создание, инкремент, удаление, установка нового значения сиквенса
    # создание
    create sequence seq_name start 100;
    # получаем инкрементированное значение
    select nextval('seq_name');
    # изменяем текущее значение
    alter sequence seq_name restart 120;
    # последнее инкрементированное значение (аналог LAST_INSERT_ID() в MySQL)
    select lastval();
    # удаление сиквенса
    drop sequence seq_name;
    
  14. Поле типа auto_increment (аналог MySQL) не существует. Есть пара конструкций serial и bigserial которые для пользователя облегчают задачу создания полей с аналогичной функциональностью , автоматически транслируя
    CREATE TABLE table_name (
      id SERIAL,
      user_name character varying(100) NOT NULL
    );
    
    в конструкцию вида
    CREATE SEQUENCE table_name_id_seq;
    CREATE TABLE table_name (
      id integer DEFAULT nextval('table_name_id_seq') NOT NULL,
      user_name character varying(100) NOT NULL
    );
    
  15. Дампим выбранную из БД таблицу
    pg_dump -U userName dbName -t table_name > dump_file.sql
    
  16. Аналог просмотра текущей активности из MySQL
    SHOW FULL PROCESSLIST;
    
    В Postgresql выглядит так
    SELECT * FROM pg_stat_activity;
    
  17. Установка пароля для пользователя после чистой установки
    sudo -u postgres psql postgres
    postgres=# \password postgres
    

Хороший ресурс с туториалами по PostgreSQL - postgresqltutorial.com
Оф. мануал - тут

mac os x: как удалить иконку из ланчпада

Меня удивило что такую простую операцию нужно так замороченно делать. Некоторые иконки из ланчпада просто невозможно удалить стандартным способом (просто держим левый клик и ждем появления контролов удаления) почему-то. В моем случае это были иконки стима не прибранные стандартным механизмом удаления. Cуть: надо удалить иконку из launchpad.
  1. Открываем launchpad, берем нужную иконку и тянем её в док
  2. В доке кликаем правой кнопкой грызуна на эту иконку и в параметрах ищем пункт меню "Показать в Finder"
  3. Удаляем иконку в файндере
  4. Удаляем иконку в доке
  5. Profit!

Git: как восстановить удаленный файл (после git rm)

Бывает по запарке удаляешь что-то не то из рабочей папки под контролем git. Обычно чтобы просто откатить состояние файла до исходного в текущей версии (даже после ручного удаления), нужно сделать такой чекаут
git checkout -- file_name.ext
В нашем же случае удаление делалось через git rm и так просто счекаутить обратно состояние уже не получится, поскольку git же думает что мы специально файл удалили. Эта проблема возникает иногда из-за того, что умная IDE сама дописывает удаления (и добавления) файлов в git, оставляя нам только ручные коммиты и пуши. Поэтому надо сделать сначала ресет файла в индексе, а уже потом чекаут (см. git help reset)
git reset -- file_name.ext
git checkout -- file_name.ext
Кстати если до коммита вы решили что какой-то файл вы добавили по ошибке (после git add но до коммита), такой же ресет поможет убрать его из следующего коммита. Для папок работает все тоже самое.

Хороший бесплатный видеоплеер для Windows

Плеер называется Media Player Classic - Home Cinema (MPC-HC)
Разработчики заявляют что поддерживает все популярные видеоформаты. Обновляется довольно регулярно. Не сказать что как-то особенно здорово выглядит, но наверное со временем им захочется что-то с этим сделать. Лёгкий. Умеет работать с плейлистами. Просто делает то, что должен делать видеоплеер. Распространяется бесплатно.
Поддерживает Windows® XP SP3, Vista, 7, 8 both 32-bit and 64-bit.
Язык интерфейса английский.