git reset --hard origin/master // replace local branch with remote branch entirely
git add -N new.txt // add files to be added to the patch.
git diff > patch-name.patch // создать патч
rediff old-patch-name.patch edited-patch-name.patch // Edit patch. Refresh the patch counts and genreates the new correct ptach.
git diff --no-index file.php file2.php > patch-name.patch // созадет патч учитывая разницу между двумя файлами. Но в патче надо будет пофиксить путь к файлу и оставить только один файл а не два.
git rm --cached -r mydirectory // Удалить папку из индекса репозитория но оставить на диске.
git rm --cached `git ls-files -i --exclude-from=.gitignore` // Remove everything which is ignored by .gitignore
git push origin HEAD:master // Если не удается сделать пуш
git push origin <branchname> // отправить локальню ветку в удаленный репозиторий (расшарить для всех)
git push origin develop:anoher_branch_name // If you want to push your local develop to a remote branch called something other than develop
git push --force-with-lease // To do the force push only if nobody else pushed to the remote branch yet (to avoid accidentally delete others’ commits)
git branch --set-upstream-to=origin/<branchname> // привязать тикущую ветку к ветке ориджин
git checkout release sites/all/... // add file from release branch to current branch
git push origin --delete <branch_name> // Удалить удаленный бранч
git remote update origin --prune // To update the local list of remote branches
// **************** Удаленные репозитории **************************//
git remote add <repo-name> <repo-address> // добавляет удаленный репо с именем
git remote update // updates the branchs
git remote -v // посмотреть какие есть удленные репозитории
git remote show <repo-name> // показвает инфу о ветках этого репо
git fetch <ropo-name> // забирает все те данные проекта, которых у вас ещё нет.
git checkout -b local-branch-name <local-ropo-name>/remote-branch-name // создает ветку и привязывает ее к удаленному бранчу
git branch -dr remote_name/branch_name // удалить локально инфо об удаленном бранче
git push ipso HEAD:master // push to the master branch of the ipso remote repo
git branch --set-upstream-to=remote-repo/branch-name-remote local-branch-name //привязывает ветку к удаленному бранчу (use --track or --set-upstream-to)
// Показать историю
git lg --all // дерево коммитов
git log // показыват историю коммитов
git reflog show // показыват историю HEAD (всех действий)
// **************** DIFF **************************//
git config core.fileMode false // Игнорировать битовые изменения в файлах
// Rонкретно игнорирует изменения в permission-ах -> http://joequery.me/guides/git-wont-ignore-permission-changes
git -c core.fileMode=false diff 12221-search-result..12221-search-result--merge // включет режим только для diff команды
git diff master..origin/dev // показать разницу между ветками открывая файлы
git diff --name-status master..origin/dev // показать разницу между ветками (только названия файлов)
git diff --name-status -- sites/modules 12221-search-result--merge..12221-search-result // показать разницу между ветками (только названия файлов) в определенной папке
// **************** ОТКАТИТЬ КОММИТЫ **************************//
git merge --squash <feature branch> // Объединит изменения всех коммитов ветки feature, перенесет их в ветку master и добавит в индекс.
// При этом коммит слияния не будет создан, вам нужно будет сделать его вручную.
git commit --amend -m "Comment" // Изменить коммент последнего комита
git branch <branchname> <sha1-of-commit> // Создать ветку на основе коммита
git branch <branchname> HEAD~3 // Создать ветку на основе символической ссылки
git reset HEAD@{1} // делаем откат изменений в репозитории на один шаг назад
// git reset --hard - удаляет все добавленные файлы и сделанные изменения физически и полностью сбрасывает индекс
// git reset --mixed (default) - оставляет добавленные файлы и сделанные изменения физически,
// но удаляет все из индекса (состояние как перед git add ./)
// git reset --soft - все изменения остаются в индексе так, будто только что был сделан git add ./
git revert HEAD // Так как мы отменили самый последний произведенный коммит, мы смогли использовать HEAD в качестве аргумента для отмены.
// Мы можем отменить любой произвольной коммит в истории, указав его хэш-значение.
git reset --hard hash // делаем откат изменений в репозитории к определенному коммиту
git push -f origin master // (без -f будет ругаться что у вас версия младше чем в гитхабе и вам надо сделать pull)
git fetch origin // если кто-то сделал forced git push в мастер
git reset origin/master // то что бы получить актуальные данные в локальном мастере надо сделать так
git checkout -- filename // revert (reset) a single file
git cherry-pick 7496f529 // Взять коммит с номером 7496f529 и применить его к текущей ветке
//**** Remove local (untracked) files from current branch ****//
git clean -n -- // Check what wiil be removed
git clean -f -d // If you want to also remove directories
git clean -f -X // If you just want to remove ignored files
git clean -f -x // If you want to remove ignored as well as non-ignored file
git reset HEAD <file/folder-name> // remove specific file from indextation (works after you just made git add ./)
git branch -m <old-branchname> <new-branchname> // Переименовать local branch
git branch -r // Показать все удаленные ветки
git tag // Список тегов
git tag --delete <tagname> // Удалить тег
git push --delete origin tagname // Удалить удаленный тег
git tag 1.0.<number 0f release>-<date>--<ticket number> // Создать тег
git tag -l | xargs git tag -d # remove all local tags
git fetch -t # fetch remote tags
git blame -L 12,22 products.php // позволяет посмотреть когда и кем редактировалась каждая строка файла в последний раз.
git bisect // позволяет нам откатить проект на заданное число коммитов и найти тот коммит, в котором баг проявляется
git filter-branch --tree-filter 'rm -f webdir/files.old' HEAD // удаляет папку files.old из всех комитов и истории в общем
git stash // спрятать все локальные изменения
git stash apply // наложить спрятанные изменения к текущей ветке
git stash drop // очистить пространство от спрятнных изменений
########### Как объединить несколько коммитов в один ##############
####
### READ BEFORE - https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing
#####
#Выполните git rebase -i HEAD~3. В ответ на это вы получите "диалог" (окно редактирования файла) вида:
pick bcdca61 Second commit
pick 4643a5f The third commit with cool stuff
pick e0ca8b9 The last commit
# Rebase 48411de..e0ca8b9 onto 48411de
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# при этом, коммиты указаны в порядке возрастания времени создания (самый нижний -- самый свежий).
# В "диалоге" из п.2 вам нужно заменить pick на squash для двух самых свежих коммитов (две нижние строки). В примере выше, это должно выглядеть вот так:
pick bcdca61 Second commit
squash 4643a5f The third commit with cool stuff
squash e0ca8b9 The last commit
# Rebase 48411de..e0ca8b9 onto 48411de
#
# ...
#После этого вы должны закрыть этот "диалог" (сохранить редактируемый файл). Если для работы с git используется vi (по умолчанию), то это делается последовательным нажатием ESC, вводом :wq и нажатием Enter.
#В следующем "диалоге" вам предложат указать заголовок для получившегося коммита.