Основные команды при работе с GIT

163

Фиксирование изменений всех файлов в папке одной командой

Если вы хотите добавить в коммит изменения сразу всех файлов в папке (в данном примере папка называется test-dir), то для этого используем следующую команду:

git add test-dir/

Переименовывание/перемещение файла

git mv name.txt new-name.txt

Отмена изменений в файле до последнего коммита

git restore name.file

Откат изменений в файле к определенному коммиту

Просматриваем историю коммита файла и копируем идентификатор нужного коммита

git log name.file

Вместо ИДЕНТИФИКАТОР вставляем идентификатор нужного коммита

git checkout ИДЕНТИФИКАТОР name.file

Скачать изменения с сервера из ветки master в текущую ветку

git branch test-branch      # переключаемся на нужную вертку (в данном примере test-branch)
git fetch origin            # получаем изменения из удаленного репозитория origin
git merge origin/master     # сливаем в текущую ветку изменения из master

Изменения, сделанные в заданном коммите:

git show d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4

Посмотреть, кем в последний раз правилась каждая строка файла:

git blame file.txt

Просмотр изменений (суммарных, а не всех по очереди, как в «git log»):

git diff

Как правильно отправить PullRequest в чужой проект

1. Сделайте "форк" репозитория, а затем клонируйте его в свою локальную среду разработки

git clone git@example.com:username/original-repo.git

2. Добавьте основой репозиторий как удаленный (remote) с названием "upstream"

Перейдите в директорию куда вы сделали клон на первом шаге и выполните следующую команду:

git remote add upstream git://example.com/username2/original-repo.git

3. Получите последние изменения кода из основного репозитория

git fetch upstream

Вы должны начинать с этого шага для каждого нового патча, чтобы быть уверенными, что работаете с кодом содержащим последние изменения.

4. Создайте новую ветку основанную на текущей master ветке оригинального репозитория

git checkout upstream/master
git checkout -b 999-название-вашей-ветки

5. Пишем код

Убеждаемся, что он работает :)

6. Cделайте коммит изменений

Добавляем файлы c изменениями:

один файл

git add путь/до/вашего/файла.php

все измененные файлы

git add .

Если добавить в описание коммита номер тикета #XXX, тогда Git автоматически свяжет его с тикетом над которым вы работаете:

git commit -m "Описание коммита для тикета #42"

7. Получите последние изменения кода из upstream (добавили на втором шаге)

git pull upstream master

Опять же таким образом убеждаемся, что ваша ветка содержит последние изменения. Если возникли конфликты, исправляем и снова комитим.

8. Имея код без конфликтов отравьте изменения на git

git push -u origin 999-название-вашей-ветки

9. Пришлите pull request в основной репозиторий

Перейдите в свой репозиторий на GitHub'e и нажмите "Pull Request", выберите свою ветку справа и добавьте описание вашего "Pull Request'a", чтобы GitHub автоматически связал его с тикетом добавьте в комментарий номер тикета '#999'.

10. Ожидайте рассмотрения вашего кода

Кто-то рассмотрит ваш код и может быть попросит внести изменения, если это произошло возвращайтесь к 5 шагу.

11. Удаление ветки

После того как ваш код приняли или отклонили вы можете удалить ветку из локального репозитория и GitHub'a

git checkout master
git branch -D 999-название-вашей-ветки
git push origin --delete 999-название-вашей-ветки

Все шаги кратко

git clone git@github.com:ваше-имя-пользователя/DocLister.git
git remote add upstream git://github.com/AgelxNash/DocLister.git
git fetch upstream
git checkout upstream/master
git checkout -b 999-название-вашей-ветки
### пишем код
### пишем код
### пишем код
### пишем код
### пишем код
git add путь/до/вашего/файла.php
git commit -m "Описание коммита для тикета #42"
git pull upstream master
git push -u origin 999-название-вашей-ветки

Как сообрать последние 3 коммита в один

Работает и на уже push-нутых ветках, если потом делать git push --force. Последняя команда заменят ветку целиком, так что с ней надо быть особо осторожным.

git reset --soft HEAD~3
git commit -m 'new commit message'

Возможен еще вариант

D появившемся окне оставить p у тех комитов которые должны остаться, а s у тех которые должны приклеиться к верхним

git rebase -i HEAD~3

Как откатить изменений до коммита dd61ab23

git revert dd61ab23
git reset HEAD^ --hard
git push origin -f

Как преименовать уже пушнутый тег

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

Как переместить незакоммиченые изменения в новую ветку

git stash
git checkout -b название-новой-ветки
git stash pop
git push -u origin название-новой-ветки

Другие комманды связанные с прятаньем

git stash save "киллер-фитча" # спрятать с именем киллер-фитча
git stash list                               # показать все спрятанные блоки
git stash apply stash@{1}          # применить предпоследнее спрятанное изменение
git stash drop stash@{0}           # удалить последнее спрятанное изменение

Изменить автора последнего коммита

git commit --amend --author "AgelxNash <iam@agel-nash.ru>" --no-edit && git rebase --continue
git push origin master --force

Добавление файла к последнему коммиту

git add filename
git commit --amend --no-edit
git push -f

Если нужно просто изменить текст последнего коммита

git commit --amend
git push -f

Если изменения еще не запушены, то git push -f выполнять не нужно

Как создать ветку на основе PullRequest (вместо $id подставить номер PR)

git fetch origin pull/$id/head:pr-$id
git checkout pr-$id

Статьи и документации