Skip to content

Instantly share code, notes, and snippets.

@gaalferov
Last active September 21, 2022 13:28
Show Gist options
  • Save gaalferov/c23002e30dbb29dfc903a7dd93d3787f to your computer and use it in GitHub Desktop.
Save gaalferov/c23002e30dbb29dfc903a7dd93d3787f to your computer and use it in GitHub Desktop.
Git cheat sheet (rus)
Создать новую ветку с названием "dev-20160202-testBranch" из ветки origin/master
git checkout -b dev-20160202-testBranch origin/master
git checkout -b dev-20160308-newdesign-admin origin/new_desing
Создать новую ветку с именем "dev-20150225-gaalferov-newDesign-search" c ветки "origin/dev-20151229-denst-newDesign"
git checkout -b dev-20150225-gaalferov-newDesign-search origin/dev-20151229-denst-newDesign
Проверить какая сейчас ветка активна
git branch
Удаление веток
git push origin :heads/SEO-40 (удалить удаленную ветку)
git branch -d SEO-40 (удалить локальную ветку)
Подтянуть последние изменения
git pull
git pull --all
git pull --rebase (Git сначала заберёт изменения из удалённой копии ветки, а потом накатит ваши незапушенные коммиты после самого последнего коммита удалённой ветки, так, как будто бы всё так и было)
Подтянуть все изменения по всем веткам
git fetch --all
Отправить изменения
git push
git push -f origin master (После того, как откат сделан, и выполнен очередной локальный коммит. ОБЯЗАТЕЛНО УКАЗЫВАТЬ ВЕТКУ В КОТОРУЮ ПУШИТЬ, ИНАЧЕ ЗАТРЕТ СВЯЗАННЫЕ С НИМ)
Добавить новую ветку
git push origin NewBranchName
Отктатить обратно файл (error: Your local changes to 'parsing/restaurants/chernovar.php' would be overwritten by merge. Aborting.)
git checkout parsing/restaurants/chernovar.php (Это как git reset --hard, только для конкретного файла.)
Спрятать изменения
git stash
git stash pop
git stash listz
git stash save "add .idea and logs" (сохранить)
git stash apply stash{0} (применить)
git stash drop stash@{0} (удалить)
Отменить последний коммит (если еще не запушил)
git reset --soft HEAD^ - без потери изменений
git reset --hard HEAD^ - с потерей всех локальных изменений
git reset --hard {{some-commit-hash}} — вернуться на определённый коммит в истории. Все изменения, сделанные после этого коммита пропадут.
git reset {{some-commit-hash}} — вернуться на определённый коммит в истории. Все изменения, сделанные после этого коммита, получат состояние «Not staged for commit». Чтобы вернуть их обратно, нужно использовать команды git add и git commit.
git reset --soft {{some-commit-hash}} — вернуться на определённый коммит в истории. Все изменения, сделанные после этого коммита, получат состояние «Staged for commit». Чтобы вернуть их обратно, нужно использовать команду git commit.
После отката на определенный коммит, запушить с форсом
git reset --hard b7ec798
git reset --hard HEAD~1
git push origin feature/SCALRCORE-9180 -f
Откатить последний коммит (если уже запушил)
git revert HEAD (последний коммит)
git revert HEAD~1 (ПРЕД последний коммит)
общая информация
git status
git status -s
Коммит
git commit
git commit --amend (внести исправления в последнюю ветку, если еще не запушил)
Лог ветки
git log
git log --oneline --graph
Поиск поломок между ветками
git bisect
git bisect start — начинаем процедуры разделения
git bisect good {{some-commit-hash}} — помечаем коммит как хороший (например, последний сделанный вами перед отпуском)
git bisect bad {{some-commit-hash}} — помечаем плохой коммит (например, HEAD главной ветки, HEAD означает последний коммит)
В этот момент Git находит срединный коммит и сообщает вам, что можно проводить проверку
git bisect bad — сообщаем Git о том, что наша фича не работает в проверяемом в данный момент коммите
git bisect good — сообщаем Git о том, что наша фича работает в проверяемом в данный момент коммите
Когда первый плохой коммит будет найден, Git сообщит вам об этом, при этом выполнение git bisect завершается
git bisect reset — возвращаемся начальной точке процесса git bisect (например, к HEAD главной ветки)
git bisect log — отображает последний успешно выполненный git bisect
Добавление новой ветки с именем 'upstream', которая будет отслеживать github проект git://github.com/octocat/Spoon-Knife.git
git remote add upstream git://github.com/octocat/Spoon-Knife.git
Объединение веток
git merge orign/master
git merge --no-ff orign/master
git merge --abort - отменить merge пока не закомитил
Объединение всех изменений в 1 коммит
git checkout -b fix/SCALRCORE-8779
git merge --squash fix/7.9.0/SCALRCORE-8779
git commit -m "SCALRCORE-8779"
git push
git checkout master
git checkout -- <file> OR . (Отмена изменений по 1 файлу или всей директории)
git pull upstream master
git push origin master
git rebase master #Всё отличие только здесь
git cherry-pick <hash коммита> mega_fix~3 v1.0.1
Из примера выше видно, что на коммит можно сослаться сразу несколькими способами:
Используя SHA хэш коммита (или его сокращенный вариант).
Используя имя ветки (можно использовать синтаксис ^<N> и ~<N>).
Используя тэг, которым помечен коммит.
Стоит отметить, что в отличии от слияния (merge) при cherry-pick переносятся только изменения, а не сам коммит полностью. При этом, в целевой ветке создается новый коммит (коммиты) содержащий необходимые изменения.
git cherry-pick --no-commit ^master feature/SCALRCORE-8986 - перенос всех изменений, без коммита (^master - от которой ветки создана ветка, feature/SCALRCORE-8986 - с какой ветки вытянуть все изменения)
Взять все измененные файлы с папками и запихнуть все в zip
zip modified-files.zip $(git ls-files --modified)
Взять все измененные и новые файлы между текущей веткой и веткой master (запихнуть все в zip)
zip DYM-89.zip $(git diff --name-status master)
После добавления папки в .gitignore, необходимо подчистить кэш
git rm -r --cached .idea
git rm -r --cached *.iml
Сгенерировать новый ключ
ssh-keygen -t rsa
Использовать другой ssh ключ в проекте
git config --add --local core.sshCommand 'ssh -i ~/.ssh/id_rsa_somename'
Или можно добавить сразу в общий конфиг ~/.ssh/config
Host github.com-alias1
Hostname github.com
IdentityFile=/home/user/.ssh/id_rsa_somename
Host github.com-alias2
Hostname github.com
IdentityFile=/home/user/.ssh/id_rsa_somename2
Использовать алиас через ssh config файл
git clone git@github.com-alias1:1alf/some-project.git
После чего будет юзаться алиас для "origin"
.gitconfig
[remote "origin"]
url = git@github.com-alias1:1alf/some-project
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment