Skip to content

Instantly share code, notes, and snippets.

@AgelxNash
Last active November 10, 2021 05:12
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save AgelxNash/a030d9c080eda4a3791e to your computer and use it in GitHub Desktop.
Save AgelxNash/a030d9c080eda4a3791e to your computer and use it in GitHub Desktop.
Как правильно отправить PullRequest в чужой проект
# OS Spefific files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~
.DS_Store
.AppleDouble
.LSOverride
Icon
._*
.Spotlight-V100
.Trashes
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# IDE and dev tools specific files
.idea
*.iml
.vagrant
node_modules
# Symfony specific
/vendor
/var
/app/config/parameters.yml
/assets/vendor
# Build artifacts
/build/

Примеры комманд

git branch                                                   # Список веток
git branch -m old_branch new_branch                          # Переименовать локальную ветку
git branch -D old_branch                                     # Удалить ветку old_branch из локального репозитория
git push origin :old_branch                                  # Удалить ветку old_branch из репозитория
git push origin --delete old_branch                          # Удалить ветку old_branch из репозитория
git push --set-upstream origin new_branch                    # Отправить новую ветку в репозиторий и переключиться на нее
git checkout -b name_of_your_new_branch                      # Создать новую локальную ветку
git push origin name_of_your_new_branch                      # Отправить новую ветку в репозиторий
git remote set-url origin git@example.com:vendor/package.git # Изменить адрес репозитория
git tag -d name_of_your_tag                                  # Локальное удаление тега
git push origin :refs/tags/name_of_your_tag                  # Удаление тега из репозитория
git tag v1.0 ec32d32                                         # Создать тег связанный с коммитом
git push origin --tags                                       # Отправить все теги на сервер
git fetch --tags                                             # Скачать все теги в локальный репозиторий
git reset --soft HEAD~                                       # Отменить последний коммит
git reset --hard dev                                         # Заменить текущую ветку на ветку dev (все изменения удаляются)    
git reset --hard HEAD                                        # Отмена всех локальных изменений (новые файлы не удаляются)
git clean -nd                                                # Посмотреть какие файлы могут быть удалены (это не проиндексированные
                                                             # новые файлы или файлы добавленные в .gitignore)
git clean -fd                                                # Удалить файлы отображенные предыдущей коммандой
git add .                                                    # Добавить файлы в индекс из рабочего каталога в индекс
git add <имя_файла>                                          # Добавить конкретный файл в индекс
git log -- [имяфайла]                                        # Показать только историю коммитов одного файла
git log -p -- [имяфайла]                                     # Показать историяю коммитов с изменениями для файла
git log --follow -p -- [имяфайла]                            # Показать всю историю файла (включая историю переименований).
diff -u OriginalFile NewFile > PatchFile                     # Создание патча для файла
patch OriginalFile < PatchFile                               # Применение патча к файлу
diff -ruN OriginalDir NewDir > PatchFile                     # Создание Патча для Директории
patch -p0 < PatchFile                                        # Применение патча к созданной структуре
patch -R -p0 OriginalFile < PatchFile                        # Отмена изменений сделанных патчем
git cherry-pick 1a571364                                     # Смиржить изменения из коммита 1a571364 в другой ветке
git reset filename                                           # Отменить действие комманды git add для конкретного файла

Как сообрать последние 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

Часто задаваемые вопросы

#!/usr/bin/env bash
echo "php-cs-fixer pre commit hook start"
PHP_CS_FIXER="bin/php-cs-fixer"
PHP_CS_CONFIG=".php_cs"
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM -- '*.php')
if [ -n "$CHANGED_FILES" ]; then
$PHP_CS_FIXER fix --config "$PHP_CS_CONFIG" $CHANGED_FILES;
git add $CHANGED_FILES;
fi
echo "php-cs-fixer pre commit hook finish"

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-название-вашей-ветки
@AgelxNash
Copy link
Author

AgelxNash commented Mar 20, 2018

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

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}           # удалить последнее спрятанное изменение

@AgelxNash
Copy link
Author

AgelxNash commented May 25, 2018

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

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 выполнять не нужно

@AgelxNash
Copy link
Author

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

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

@AgelxNash
Copy link
Author

git merge -s ours youbranch
Говорит гиту, что ветка youbranch смиржена с текущей, при этом фактически никакие файлы не миружтся, а берутся из текущей версии.

@AgelxNash
Copy link
Author

Включить GPG подпись

gpg2 --full-gen-key
gpg2 --armor --output mypublic.key --export 'mail@example.com'
cat mypublic.key # загружаем содержимое файла в раздел GPG ключи на GitHub/GitLab и т.п.
gpg2 --list-secret-keys --keyid-format SHORT
git config --local user.signingkey "YOUKEY" #Вместо YOUKEY подставляем ключ из результатов предыдущей комманды
git config --local gpg.program gpg2
git config --local user.name "you_git_login"
git config --local user.email "mail@example.com"

@AgelxNash
Copy link
Author

squash, rebase, merge ????

@AgelxNash
Copy link
Author

https://stackoverflow.com/a/20653073/2323306
Описание LF/CRLF и как это исправить

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment