Git

Облегчаем свою работу в Git:

Исправляем запутанные ситуации в git с помощью git reflog. Не забываем, что история коммитов, веток - граф .

Перенос отдельного коммита в другую ветку: git cherry-pick.

Workflow

Найти потерянные коммиты

Полезно для поиска заначек (stash) - до того, как прошелся сборщик мусора (garbage collector, git gc).

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Разрулить конфликты

В случае конфликта pull оставить наши файлы:

git pull -X ours

В случае конфликта pull оставить файлы с «их» репозитория:

git pull -X theirs

Если был сделан обычный pull или merge, и вывелось сообщение

Не удалось провести автоматическое слияние; исправьте конфликты и сделайте коммит результата.

Смотрим изменения через git status, затем правим вручную, либо принимаем «наши» изменения полностью или на уровне отдельных файлов:

# наши изменения (что в текущей ветке):
git checkout --ours -- <filename>
# их изменения (изменения из ветки, которую сливаем):
git checkout --theirs -- <filename>

Найти все файлы с конфликтами, оставить свои/чужой вариант: мануал

История изменения файла

git log -p file.txt

Полная история изменения файла, включая историю до переименования файла и статистику:

git log --follow --stat -p file.txt
Если имя файла начинается с минуса -, для отбивки его от параметров строки следует использовать --, например git log -p -- --stat покажет историю файла --stat

Кто редактировал эту строку?

git-who-do-this.sh
git blame path/file.php | grep 'termin'

Удалить неотслеживаемые файлы

Будут физически удалены все файлы, не отслеживаемые git
git clean -fd

Клонировать часть истории Git

git-clone-depth.sh
git clone --depth=1 git://github.com/phalcon/cphalcon.git

Точка слияния двух веток

git-merge-point.sh
git show --summary `git merge-base master dev`

Переименовать ветку

git branch -m <oldname> <newname>

Переименовать текущую ветку:

git branch -m <newname>

Удалить remote-ветку в origin-репозитории

git-delete-origin-branch.sh
git push -d origin my-branch  # удаляет remote-ветку в origin-репозитории (git 2.8+)

Назначить рабочий каталог

Чтобы git хранил свои файлы репозитория в одном месте git/test, а работал в другом рабочем каталоге: work/test

mkdir git
mkdir -p work/test
git --git-dir git/test --work-tree work/test init
touch work/test/foo.txt
git --git-dir git/test status
  • --work-tree - следует задать при создании репозитория
  • --git-dir - вызывать git, находясь в рабочем каталоге:
cd work/test
git --git-dir ../../git/test status

или в каталоге репозитория:

cd git/test
git status

Вставить картинку на гитхаб

README.md
![Image alt](https://github.com/{username}/{repository}/raw/{branch}/{path}/image.png)
  • {username} — ник на ГитХабе;
  • {repository} — репозиторий где хранятся картинки;
  • {branch} — ветка репозитория, f.e. master;
  • {path} — путь к месту нахождения картинки.

Отправить Pull Request на гитхаб

Отключить плагин git-prompt в приглашении командной строки

Глобально:

git config --global oh-my-zsh.hide-status 1

Только текущий репозиторий:

git config oh-my-zsh.hide-status 1

Ссылки

Печать/экспорт