nortmas
5/21/2014 - 9:19 AM

Comands

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       // очистить пространство от спрятнных изменений
########### Как объединить несколько коммитов в один ##############

#Выполните 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.
#В следующем "диалоге" вам предложат указать заголовок для получившегося коммита.