start in git


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