[Git] bad object refs/remotes/origin/HEAD

Проблема: при выполнении команды git gc выдается ошибка:

fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

Один из вариантов решения проблемы:

git remote set-head origin --auto

При повторной попытке выполнить команду ‘gc’:

Enumerating objects: 6542, done.
Counting objects: 100% (6542/6542), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2081/2081), done.
Writing objects: 100% (6542/6542), done.
Total 6542 (delta 4576), reused 6278 (delta 4335)

[Git] Узнать количество коммитов за период

Узнать количество коммитов за определенный период времени можно следующим способом:

Количество коммитов в текущей ветке за указанный период времени:

git rev-list --count HEAD --since="Jan 1 2016" --before="Dec 31 2016"

Количество коммитов по всем веткам за указанный период времени:

git rev-list --count --since="Jan 1 2016" --before="Dec 31 2016" --all

Количество коммитов (исключая мержи) по всем веткам за указанный период времени:

git rev-list --count --since="Jan 1 2016" --before="Dec 31 2016" --all --no-merges

[Git] Как узнать название ветки

Написал небольшой скрипт, который берет название ткущего бранча в гите, и использует его в дальнейших манипуляциях.

Для того, чтобы узнать название ветки, достаточно выполнить команду git branch.

Однако проблема заключается в том, что команда выводит список всех веток, помечая рабочую ветку звездочкой (*):

git branch
*dev
master
discount
redesign
...

Из всего этого списка нам нужно вычленить название dev, да еще и без звездочки.

Решение:

git branch | grep \* | cut -d ' ' -f2-

[Git] Warning: Unprotected Private Key File!

Если при попытке выполнить команду (к примеру, git fetch) будет выведена ошибка «Unprotected Private Key File!», то значит у вас выставлены некорректные права доступа:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/path/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
key_load_private_type: bad permissions
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
error: Could not fetch origin

Решение:

find /path/.ssh/id_rsa -type f -exec chmod 600 {} \;
find /path/.ssh/ -type d -exec chmod 700 {} \;

[Git] Автодополнение команд

Чтобы использовать автодополнение вводимых git-команд через клавишу TAB, необходимо скачать скрипт git-completion.bash и сохранить его в любом месте. Затем в файле .profile (располагается к корне домашней директории) прописать до него путь:

# Git command completion
source /<директория>/git-completion.bash

После перезапуска оболочки, автодополнение начнет работать.

[Git] Удаление метки (тега)

Допустим, есть тег с именем v1.0. Для удаления тега можно использовать следующие команды:

git tag -d v1.0 – удаление локальной метки
git push origin :refs/tags/v1.0 – удаление метки на удаленном сервере

[Git] Добавление файлов с исключением

git add .
git reset <файл для исключения>
git commit -m "название коммита"

Первая команда добавляет файлы в стейджинг. Вторая команда исключает один файл из стейджинга (т.е. данный файл не будет включен в коммит, но изменения будут сохранены локально).

[Git] Создание удаленной ветки при пуше

Если необходимо пушнуть изменения в ветку удаленного репозитория, которой еще нет, то следующая команда поможет в решении данного вопроса:

git push <remote-name> <local-branch-name>:<remote-branch-name>

Пример:

git push origin dev:new-feature

Enter passphrase for /.ssh/id_rsa:

На днях, после перезагрузки iMac, при выполнении команд git’а на pull или push стало появляться сообщение о необходимости ввода пароля для секретного ssh-ключа:

$ git push origin dev
Enter passphrase for key '/Users/user/.ssh/id_rsa':

Чтобы каждый раз не вводить пароль, нужно выполнить следующие команды:

eval $(ssh-agent)
ssh-add