Этот пост похож на советы и рекомендации, в которых я описываю некоторые интересные и эффективные вещи в git. И время от времени я возвращаюсь к этой шпаргалке, потому что могу что-то забыть.

# 1 Отслеживание удаленной ветки и создание локальной ветки с тем же именем.

git checkout -t origin/{{branch_name}}

# 2 Показать отсортированный список по количеству коммитов для каждого автора во всех ветвях.

git shortlog -s -n --all

№3 Показать изменения в строке (строках) в файле (в нашем случае строка №1).

git log -L 1,1:{{file_path}}

# 4 Показать имя текущей (активной) ветки.

git rev-parse --abbrev-ref HEAD

# 5 Более удобный список статусов.

git status -sb

# 6 Показать список всех конфликтующих файлов.

git diff --name-only --diff-filter=U

№7. Показать, что изменилось за неделю.

git log --no-merges --raw --since='1 week ago'

# 8 Показать изменения, которые будут перенесены в следующую фиксацию.

git diff --staged

# 9 Сброс всех локальных изменений и откат к HEAD.

git reset --hard HEAD^

# 10 Удалите последнюю локальную фиксацию, но сохраните локальные изменения.

git reset --soft HEAD^

# 11 Сохранить файл в рабочем каталоге и удалить из индекса.

git rm --cached {{file_path}}

№12 Мягкое отмена фиксации.

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

git revert -n

# 13 Прервать локальное слияние.

git reset --merge

# 14 Удалите все локальные ветки удаленного отслеживания, которых больше нет на удаленном компьютере.

git fetch -p

# 15 Удалите все локальные ветки, которые были объединены в главную.

git branch --merged master | grep -v "^\*" | xargs -n 1 git branch -d

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

git clean -f -d

# 17 Перейти к предыдущей ветви.

git checkout -

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

git branch -m {{new_branch_name}}

# 19 Перебазируйте ветвь feature в master и объедините. В этой статье вы можете найти хорошее объяснение, что означает перебазировать.

git rebase master feature && git checkout master && git merge -

# 20 Найдите ближайший тег к заданной фиксации.

git describe --contains {{commit_hash}}

# 21 Изменить последнюю локальную фиксацию.

Это подходит, если вы зафиксировали изменения, а затем обнаружили опечатку или забыли исключить некоторые вещи разработчика.

- добавить то, что было забыто:

git add {{file_path}}

- а затем зафиксировать:

git commit --amend -m "{{Comment: some fix}}"

Иногда нам просто нужно изменить только опечатку в сообщении о фиксации без изменения каких-либо файлов.

git commit --amend --allow-empty -m "{{Comment: new fix}}"

# 22 Извлечь файл из другой ветки.

git show {{branch_name}}:{{file_path}}

# 23 Тайник.

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

23.1 Сохранить все изменения:

git stash

23.2 Именованный тайник:

git stash save {{stash_name}}

23.3 Вы можете спрятать только необходимые изменения:

git stash -p

23.4 Захватите один файл из тайника:

git checkout stash@{n} -- {{file_path}}

# 24 Показать автора, дату и последние изменения в файле.

git blame {{file_path}}

# 25 Отладка Git, попытка найти сломанный коммит.

Когда вы пытаетесь найти ошибку, которая сломала что-то в приложении, как обычно, это команда git blame при неправильной фиксации, пытаясь выяснить, кто был автором этой фиксации. Но если эта ошибка труднодоступна, возможно, вам следует использовать git bisect, чтобы исследовать историю изменений в надежде найти плохую фиксацию. Полную документацию вы можете найти здесь.

В общем случае это будет так:

git bisect start 
git bisect good {{commit_hash}}
git bisect bad {{other_commit_hash}}
// ... trying to find bad commit marking commits as
git bisect bad
// ... or
git bisect good

# 26 Полное копирование одного репозитория в другой (включая историю коммитов и ветки).

git clone --mirror {{url://to/old_repo}}
cd {{old_repo}}
git remote add new-origin {{url://to/new_repo}}
git push new-origin --mirror

# 27 Клонирование только специального каталога из старого репозитория в новый с сохранением истории всех изменений.

mkdir {{/path/to/new_repo}}
git init --bare
cd {{/path/to/old_repo}}
git subtree split --prefix={{directory_name}} -b split
git push {{/path/to/new_repo}} split:master
cd {{/path/to/new_repo}}
git remote add origin {{url://to/new_repo}}
git push origin master

Спасибо за чтение.

Надеюсь, это поможет в вашем рабочем процессе. Также я предлагаю прочитать эту книгу сообщества git и git magic, чтобы улучшить свои GIT-навыки.

Если вам понравилась эта статья, поделитесь ею, чтобы ее увидели другие.