Git

GIT

Персональная шпаргалка по опциям git.

Создание

# Создание репозитория и push на GitHub
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/<>
git push -u origin master
# Создание ветки и переключение на нее - #1
$ git checkout -b iss53

# Создание ветки и переключение на нее - #2
$ git branch iss53
$ git checkout iss53
#
# Создание ветки без истории (последнее состояние)  - #1
#
# Check out to a temporary branch:
$ git checkout --orphan <TEMP_BRANCH>
# Add all the files:
$ git add -A

# Commit the changes:
$ git commit -am "Initial commit"

# Delete the old branch:
$ git branch -D <OLD_BRANCH>

# Rename the temporary branch to NEW_BRANCH:
$ git branch -m <NEW_BRANCH>

# Finally, force update to our repository:
$ git push -f origin <NEW_BRANCH>

#
# Создание ветки без истории (последнее состояние) - #2
#
# Clone the project:
$ git clone https://github/<USER_NAME>/<PROJECT_NAME.git>

# Since all of the commits history are in the `.git` folder, we have to remove it:
$ cd myproject

# And delete the `.git` folder:
$ git rm -rf .git

# Now, re-initialize the repository:
$ git init
$ git remote add origin https://github.com/<USER_NAME>/<PROJECT_NAME.git>
$ git remote -v

# Add all the files and commit the changes:
$ git add --all
$ git commit -am "Initial commit"

# Force push update to the master branch of our project repository:
$ git push -f origin master

Клонирование

# Клонирование ветки
$ git clone <url> --branch <branch> --single-branch [<folder>]

Перемещение:

# Перемещение ветки:
$ git branch --move <OLD_BRANCH> <NEW_BRANCH>
$ git checkout <NEW_BRANCH>
$ git push origin [--set-upstream] <NEW_BRANCH>
$ git push origin --delete <OLD_BRANCH>

Удаление

# Удаление файла из индекса, при котором он остается в рабочем каталоге
$ git rm --cached [file]

# Удаление из индекса директории
$ git rm --cached -r [dir]

# Удаление ветки
$ git push -D <branch>

# Удаление ветки из удаленного репозитория
$ git push -d origin <BRANCH_NAME>
To git@github.com
 - [deleted]         <NEW_BRANCH>

# Удаление локального тега
$ git tag -d <TAG_NAME>

# Удаление тега из удаленного репозитория (напр. GitHub)
$ git push origin :refs/tags/<TAG_NAME>

# Альтрнативные варианты
git push --delete origin <TAG_NAME>
git tag -d <TAG_NAME>

Информация

# Текущий коммит (хеш)
# Полный хеш
$ git rev-parse --verify HEAD
# Сокращённый хеш
$ git log --pretty=format:'%h' -n 1

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

# Откат изменений в репозитории на <N> коммитов назад
$ git reset --hard HEAD~<N>
# Принудительный коммит в основной репозиторий
$ git push -f origin master
# Сброс/возврат файлов из определённого коммита
$ git checkout c5f567 -- file1/to/restore file2/to/restore
# Сброс/возврат файлов из коммита предшедствующего указанному
$ git checkout c5f567~1 -- file1/to/restore file2/to/restore
# Возврат файлов из предыдущего коммита (-n - глубина возврата: 1 - текущий, 2 - предыдущий и тд.)
$ git checkout `git log --pretty=format:'%h' -n 1`~1 -- file1/to/restore file2/to/restore

Слияние веток (merge)

# Объединение ветки master с веткой dev
$ git checkout master
$ git merge dev

# Отмена слияния в случае возникновения конфликта.
# В случае успешного слияния не сработает
$ git merge --abort

Сравнение

# Сравнение веток - только файлы
$ git diff --name-status master..yourBranchName