https://github.com/git-for-windows/git/releases/tag/v2.9.3.windows.1
https://git-scm.com/docs/git-config
https://git-scm.com/book/ru/v2/Инструменты-Git-Исправление-истории
https://danielkummer.github.io/git-flow-cheatsheet/index.ru_RU.html
https://www.gitignore.io/api/wordpress
# архив без истории в папке с текщуй датой
git archive --prefix=`date +%d-%m-%y-%H:%M`/ --format=zip HEAD > HeadArchive.zip
# архив с историей изменений . потом из него можно клонировать с историей коммитов
# после HEAD укажите ветку
git bundle create "$(basename $(pwd)).bundle" HEAD
git bundle create "$(basename $(pwd)).bundle" --all
# упакуем в папку с именем родительской директории
zip -rq $(basename $(pwd)) .git
# полезные сокращения
cat << EOT >> ~/.bashrc
alias c='git status && echo "commit mess: " && read message && git add . && git commit -m "\$(echo \$message)" && git push'
alias gf='git config --global core.filemode false && git config core.filemode false'
EOT
# my name
git config --global user.name dev
git config --global user.email dev@dev.dev
# aliases
git config --global alias.h "log --pretty=format:'%h %ci | %s%d [%an]' --all -5"
git config --global alias.l "log --oneline --decorate --graph --all -5"
git config --global alias.ll "log --decorate --graph --first-parent --no-merges -5"
git config --global alias.last "log --pretty=format:'%s' --since='since last week'"
git config --global alias.s status
git config --global alias.sm "ls-files --others --exclude-standard"
git config --global alias.c "commit -am"
#
git config --global push.default simple
# помнить пароли
git config --global credential.helper store
# редактор по умолчанию
git config --global core.editor mcedit
git config --global core.filemode false
# \u1234 отключаем такой вывод юникода
git config --global core.quotepath off
# если вдруг ошибки то удалить так
git config --global --unset-all 'core.quotepath'
На линукс по умолчанию гит следит еще и за правами на файлы . Чтобы измежать подобного надо stack HowTo
# гит не следит за правами на файлы
git config --global core.filemode false
git config core.filemode false
# чистим пароли
git config --system --unset credential.helper
git config --list # show
git config credential.helper "" # remove
Делаем СКВ
cat <<EOT >> .gitignore
# development environment
.idea
*.sublime-project
*.sublime-workspace
.buildpath
.project
# Mac DS_Store Files & Win Thumbs.db
.DS_Store
Thumbs.db
# vendors
node_modules
vendor
composer.lock
EOT
# first commit
git init
git add .
git commit -m "first"
Сложные примеры
# находит файлы изменные в последнем коммите и возращает их абсолютные имена
git diff --name-only HEAD~1 | xargs -I {} printf '%s%s\n' $(pwd) $1/{}
# Удаление файла из каждого коммита / лучше не делать. репу пересодавать придется или пуш форс делать
git filter-branch --tree-filter "rm -f passwords.txt" HEAD
# last commit hash
git rev-parse HEAD
git log --pretty=format:'%h' -n 1
# удалить untracked files
git clean -f -d
Удалить конфиденциальные файлы и их фиксации из истории Git
https://www.perforce.com/blog/vcs/git-beyond-basics-git-bundle-and-archive
Справка
git clone https://minfin34@bitbucket.org/seregs11/minfin.dev.git
#
git -c core.sshCommand='ssh -i privatekey' clone git@domain:/home/git/app/
git pull origin master
git branch --set-upstream-to origin/master master
#
#
git remote remove origin
git remote add origin git@domain/home/git/repo
# port
git remote set-url origin ssh://git@domain:7822/home/git/repo/
проверка настроек
git config --list
git add file_name - добавление файла в репозиторий(проиндексировать файл)
git commit -m "First Commit"
git commit --amend -m "Add an author/email comment" - изменение текущего коммита
git status - проверка состояния
git reset file_name - снятие индексации после его добавления
git log - история изменений
git log --pretty=oneline - история в одну строку
git log --pretty=oneline --max-count=2
git log --pretty=oneline --since='5 minutes ago'
git log --pretty=oneline --until='5 minutes ago'
git log --pretty=oneline --author=<your name>
git log --pretty=oneline --all
git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short история с указанием даты
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.hist "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"
git config --global alias.type 'cat-file -t'
git config --global alias.dump 'cat-file -p'
git checkout master - возврат к последней версии в ветке мастер
git checkout <hash> - возврат к версии по хэш
git tag <tag_name> - создание тэга
git <tag_name>~1 - переход на первую версию предшествующую <tag_name>
git reset HEAD hello.html - сброс буферной зоны,от изменений, которые уже проиндексировали
git revert HEAD<hash> - отмена последнего коммита
git reset --hard <tag>|<hash> сброс коммитов к предшествующим ошибочному коммиту
git tag -d oops - удаление тэга из истории изменений
git mv hello.html lib - перемещение файла в другой каталог
git checkout -b <имя_ветки> - является шорткатом для git branch <имя_ветки> за которым идет git checkout <имя_ветки>.
git checkout <имя_ветки> - переход на ветку <имя_ветки>
git checkout style - переход на ветку style
git rebase master - перенос изменений из ветки master в ветку style
Использовать rebase для кратковременных, локальных веток, а слияние для веток merge в публичном репозитории.
git checkout master - переход на ветку master
git merge style - слияние с веткой style(добавление ветки style в master)
git clone <название_клонируемого_репозитория(hello)> <название_репозитория(hello_clone)>
git branch (-a) - просмотр веток(удаленных веток)
git fetch - скачивает все изменения из оригинального репозитория, но не сливает изменения
следовательно, нужно делать git merge origin/master
git pull - эквивалентно -> git fetch
git merge origin/master
git clone --bare hello hello.git - создание чистого репозитория
git remote add shared ../hello.git - добавление репозитория к оригинальному репозиторию
git push shared master - отправка изменений на удаленный репозиторий
____________________________
Последовательность команд для перемещения документов в репозиторий GitLab
cd "Имя пути" - команда для перехода в папку с нужными документами
git init - команда, создающая в папке с документами скрытую папку git
git remote add origin git@... git - указывает, в репозиторий какого проекта будут помещены документы. git@... git это путь, прописанный в строке SSH на главной странице проекта в GitLab
git add . - команда добавления всех файлов, находящихся в папке. Если нужно добавить несколько файлов, тогда используется
git add "имя файла" "имя файла"
git commit
git push -u origin master - после этого документы добавлены в репозиторий
master - имя ветки (по умолчанию), в которую добавляются документы.
Последовательность команд для замены документов в репозитории GitLab
git status - показывает изменения. Файлы, которые изменились, выделены красным цветом
git add "имя файла" "имя файла" - добавление измененных файлов
git status - если git add прошла успешно, измененные файлы станут зелеными
git commit
git push -u origin master
Дополнительные команды
ls - команда просмотра содержимого папки
rm имя файла - удаление файла
history - просмотр истории
git checkout -b имя ветки - создание ветки
git push origin имя ветки - добавление ветки в репозиторий
git branch - просмотр списка веток
# reset submodules
git clean -xfd
git submodule foreach --recursive git clean -xfd
git reset --hard
git submodule foreach --recursive git reset --hard
git submodule update --init --recursive