Команды:
Для создания проекта необходимо создать директорию и инициализировать проект.
Создаём директорию проекта и файл README.md:
mkdir -p ~/git/testing ; cd ~/git/testing git init
Добавляем в него текущую директорию и делаем первую фиксацию изменений (commit), если в директории есть уже файлы:
git add . git commit -m "Initial Commit" -a
Добавляем новый файл и делаем к нему комментарий:
touch README.md git add README.md git commit -m "Add file" README.md
Добавить внешний репозиторий:
git remote add origin http://git.domain.com/test/test.git
Список внешних репозиториев:
git remote -v
Отправка изменений:
git push origin master
Клонировать внешний репозиторий:
git clone http://git.domain.com/test/test.git
Клонировать одну ветку с одним последним коммитом:
git clone --depth 1 --single-branch --branch <BRANCHNAME> <REPO>
Добавить информацию об остальных ветках с одним последним коммитом:
git remote set-branches origin '*' git fetch --depth 1
Клонировать репозиторий на определённый коммит:
git archive -o repo.tar --remote=git://${YOUR_GIT_REPO_URL} ${YOUR_GIT_HASH}
Посмотреть все доступные ветви (звёздочка указывает на активную ветвь):
git branch -a
Создать ветвь develop:
git checkout -b develop
Создать ветвь develop от коммита:
git branch develop <hash>
Создать ветвь develop без коммитов:
git checkout --orphan develop
Переключиться между ветвями:
git checkout master git checkout develop
Слияние из ветки develop в основную:
git merge develop --no-ff
Слить ветку hostfix в мастер ветку:
git checkout master git merge hotfix
Выйти из состояния слияния:
git merge --abort
Слить ветку master в develop без разрешения конфликтов с заменой файлов из master:
git checkout develop git merge --strategy=recursive --strategy-option=theirs master
Локально:
git branch -d develop
Удалённо:
git push origin --delete deploy
Добавить tag:
git tag $tag git push origin $tag
Удалить tag:
git tag -d $tag git push origin :$tag
https://stackoverflow.com/questions/18216991/create-a-tag-in-a-github-repository
Показать тэг по коммиту:
git name-rev --tags --name-only $sha
Показать коммит по тэгу:
git rev-list -n 1 $tag
Проверить статус изменений:
git status
Восстановить файл:
git checkout filename
git restore --staged <filename>
Откат изменений в репозитории на один коммит назад:
git reset --hard HEAD~1
Откат последнего коммита, но оставить изменения в рабочем каталоге и индексе:
git reset --soft HEAD~1
Откат до определенного коммита по хешу:
git reset --hard 68b0442abef93d5d08cf216b542ac30c389cb1f2
Принудительный коммит на внешний репозиторий:
git push -f origin master
Откат до определенного коммита по хешу:
git revert 68b0442abef93d5d08cf216b542ac30c389cb1f2
Подтвердить откат и отправить изменения:
git commit -m "детальное описание, что и почему сделано" git push
git clean -fdx
git commit --amend -m "New commit message" git push -f
https://stackoverflow.com/questions/179123/how-to-modify-existing-unpushed-commit-messages
Слить ветку hostfix в master ветку:
git checkout master git merge hotfix
Показать файл $FILENAME из ветки $REVISION
git show $REVISION:$FILENAME
Перезаписать текущий файл $FILENAME из ветки $REVISION:
git restore -s $REVISION -- $FILENAME
Вернуть файлы к состоянию до слиянию:
git checkout HEAD~1 -- $FILENAME1 $FILENAME2
https://stackoverflow.com/questions/2364147/how-to-get-just-one-file-from-another-branch
Показать отличия до add:
git diff
Показать отличия после add:
git diff --cached
Показать отличия, вывести только статус:
git diff --name-status branch1 branch2
Показать полностью изменения:
git diff branch1 branch2
Показать отличия между предпоследним коммитом:
git diff HEAD~1
Показать список отличающихся файлов:
git diff --stat branch2 git diff --stat branch1 branch2
Показать текущее значение user.name:
git config --global --get user.name git config --get user.name
Установить для репозитория:
git config user.name "Your Name Here" git config user.email your@email.com
Установить для (глобального) значения по умолчанию (в ~/.gitconfig):
git config --global user.name "Your Name Here" git config --global user.email your@email.com
Задать прокси сервер:
git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:3128
Удалить прокси сервер:
git config --global --unset http.proxy
Проверить прокси сервер:
git config --global --get http.proxy
git config --global credential.helper store
Учётные данные по умолчанию сохраняются в ~/.git-credentials
В файле .gitmodules
Или инициализировать и обновить зарегистрированные подмодули до назначенного коммита в текущем репозитории:
git submodule update --init --recursive
Инициализировать все подмодули, для которых «git submodule init» до сих пор не вызывался перед обновлением и обновить из submodule репозитория:
git submodule update --init --recursive --remote
Переключиться на определённый commit, в директории сабмодуля:
git checkout <hash>
Показать все изменения в файле:
git log -p docker-compose.yaml
или
gitk docker-compose.yaml
Показать изменения сделанные в ревизии:
git show bfaf2fdb855a99eee29ba49b1e27d78892e6d498 docker-compose.yaml
Показать историю файла в сокращённом виде:
git log --pretty=format:'%h %ai %s' docker-compose.yaml
Решение:
git config --unset-all remote.origin.fetch git fetch --prune --all
Решение:
git branch --unset-upstream
https://losst.ru/kak-polzovatsya-git-dlya-nachinayushhih
https://habrahabr.ru/post/323234/ - Безболезненное разрешение Merge конфликтов в Git