Шпаргалка по Git

Шпаргалка по самым основным командам Git которыми нам придется чаще всего пользоваться.

Настраиваем пользователя и почту от имени которых будем коммитить

  1. git config --global user.name "Vasja Pupkin"
  2. git config --global user.email vasjapup@mail.com

Создание репозитория

  1. git init
  2. git add . #обязательно точка а не звездочка
  3. git commit -m "first commit"

Работа с git

  1. git add *.html #Добавление файлов по маске
  2. git add * #Добавление всех новых и измененных файлов
  3. git add FILENAME #Добавление конкретного файла FILENAME
  1. git commit -a -m "Комментарий к коммиту"

тут следует знать, что -a - ключ, означающий что надо закоммитить все отслеживаемые файлы, поэтому если для текущего коммита новые файлы в проект не добавлялись, то коммитить можно сразу этой командой, опуская git add

Удалить файл

  1. git rm FILENAME

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

  1. git add -u

Статус и история коммитов

  1. git status
  2. git log

Работа с удаленным репозиторием (на примере Bitbucket)
Добавляем удаленный репозиторий (предварительно создав его на самом сервисе) и заливаем на него наш проект

  1. git remote add origin https://vasyapup@bitbucket.org/vasyapup/repositoryName.git
  2. git push -u origin --all
  1. git push -u origin master #Заливаем коммиты на удаленный репозиторий
  2. git pull origin master #Скачиваем изменения с удаленного репозитория

Отмена коммитов

если они еще не опубликованы

  1. git commit -a --amend #добавить к последнему коммиту новые изменения
  2. git reset --soft HEAD^ #отменить последний коммит (но не изменения, которые вы внесли, они сохранятся)
  3. git reset --hard HEAD^ #

если уже опубликовали

  1. git revert <commit> #где <commit> - имя коммита, например 50ab40f.
  2. #Не забываем потом сделать git push

Ну и еще некоторые варианты отмен для всяких случаев

  1. git reset --hard <commit> #где <commit> - та точка к которой надо откатиться

Отменить git push --force:

  1. git push --force origin master
  2. Counting objects: 3, done.
  3. ...
  4. 12345..67890 master -> master

видим, что до пуша последний коммит в удалённом мастере был 12345, а после пуша последним стал коммит 67890
откатываем:

  1. git reset --hard 12345
  2. git push -f origin master #или можно так git push origin +master

Отменить git reset --hard
(только для закоммиченных изменений)
Ситуация - работаем в локальном репозитории, удаленного нету или ничего не запушено.
Делаем git reset --hard HEAD~3 и понимаем что удалили нужный коммит.

смотрим reflog:

  1. git reflog
  2.  
  3. 50ab40f HEAD@{0} reset: moving to HEAD~3
  4. ced7031 HEAD@{1} commit: tour catalog fix
  5. a644359 HEAD@{2} commit: breadcrumbs hide on some pages
  6. 15f01c8 HEAD@{3} commit: page special offer and some other fixes

смотрим точку к которой нам надо вернуться

  1. git reset --hard HEAD@{1}
  2. HEAD is now at ced7031 tour catalog fix

тут {1} означает вернуть файлы в том виде в котором они были одно действие (в рефлоге) назад

а можно делать и так

  1. git reset --hard master@{one.week.ago}

Таким способом можно так же откатывать git rebase -i

Отмена локальных изменений в файле до индексации (до git add)

Переключаемся на ветку master

  1. git checkout master

надо откатить изменения в файле vasja.php
смотрим статус

  1. git status
  2.  
  3. # On branch master
  4. # Changes not staged for commit:
  5. # (use "git add <file>..." to update what will be committed)
  6. # (use "git checkout -- <file>..." to discard changes in working directory)
  7. #
  8. # modified: vasja.php
  9. # no changes added to commit (use "git add" and/or "git commit -a")

видим, что файл vasja.php изменен, но еще не проиндексирован
отменяем:

  1. git checkout vasja.php
  2. git status
  3. # On branch master nothing to commit (working directory clean)