| Line 1: |
Line 1: |
| − | == Clone == | + | ==Install== |
| | + | sudo add-apt-repository ppa:git-core/ppa -y |
| | + | sudo apt-get update |
| | + | sudo apt-get install git |
| | + | git --version |
| | + | ==Clone== |
| | git clone <repository_path> | | git clone <repository_path> |
| − | == add/commit/push == | + | ===Clone with submodules=== |
| | + | git clone --recurse-submodules -j8 git@git.rra.lan:python/pilaf/Converter.git |
| | + | |
| | + | *Note: -j8 increases performance cloning up to 8 submodules at a time |
| | + | |
| | + | To update repositories with submodules use: |
| | + | git pull --recurse-submodules |
| | + | |
| | + | ==add/commit/push== |
| | git add . | | git add . |
| − | git add -a
| |
| | git add -A | | git add -A |
| | git commit -m "Message of commit" | | git commit -m "Message of commit" |
| | + | git commit -am "Message" # add and commit in one line |
| | git push origin master | | git push origin master |
| | | | |
| − | == Branching == | + | ==Branching== |
| − | git checkout <branch_name> | + | git checkout -b <branch_name> |
| | git merge | | git merge |
| | | | |
| − | == Undo last changes == | + | ===git Successful Feature Branching Workflow=== |
| | + | Onece you have cloned the master repository: |
| | + | |
| | + | *Create a branch for each feature |
| | + | *Merge branches with --no-ff |
| | + | |
| | + | git checkout -b <branch_name> |
| | + | Write your new code |
| | + | Switch to the master branch to merge |
| | + | git merge --no-ff <brach_to_merge_name> |
| | + | |
| | + | Set the current branch to specific commit: |
| | + | git reset --hard f414f31 |
| | + | |
| | + | ==Undo last changes== |
| | git checkout -- . | | git checkout -- . |
| | | | |
| − | == add remote == | + | ==add remote== |
| | git remote add <repository_name> <repository_path> | | git remote add <repository_name> <repository_path> |
| | | | |
| − | == list remote == | + | ==list remote== |
| | git remote -v | | git remote -v |
| | | | |
| − | == remove remote == | + | ==Modify remote url== |
| | + | git remote set-url origin <new_url/new_repository.git |
| | + | |
| | + | ==remove remote== |
| | git rm <repository_name> | | git rm <repository_name> |
| | | | |
| − | == pull/push == | + | ==pull/push== |
| | git push <repository_name> | | git push <repository_name> |
| | git pull <repository_name> | | git pull <repository_name> |
| | + | |
| | + | To push all branches: |
| | + | git push --all origin |
| | + | |
| | + | ===Tags=== |
| | + | To fetch tags: |
| | + | git fetch --tags |
| | + | To push tags: |
| | + | git push origin --tags |
| | + | |
| | + | ===Full copy of remote repository:=== |
| | + | <nowiki>#!/bin/bash |
| | + | for branch in `git branch -r | grep -v HEAD | grep -v master`; do |
| | + | echo ${branch##*/} $branch |
| | + | done |
| | + | git fetch --all |
| | + | git pull -v</nowiki> |
| | + | |
| | + | ==Add .gitignore== |
| | + | Add the file to the git folder |
| | + | To stop following and delete the files that were allready being tracked: |
| | + | git rm -r --cached . |
| | + | git add . |
| | + | git commit -m ".gitignore now working" |
| | + | |
| | + | #To undo git rm --cached filename use: git add filename |
| | + | |
| | + | ==git config== |
| | + | git config --global push.default [matching | simple] |
| | + | git config --global user.name "Nombre Apellido" |
| | + | git config --global user.email "user@domain.com" |
| | + | |
| | + | ===Default editor=== |
| | + | <syntaxhighlight lang="bash"> |
| | + | git config core.editor "nano -w" |
| | + | </syntaxhighlight> |
| | + | |
| | + | ==Self Signed Certificates== |
| | + | To allow cloning and pushing to a git repository over https whit a self signed certificate you must configure: |
| | + | git config --global http.sslVerify false |
| | + | or |
| | + | git -c http.sslVerify=false clone https://domain.com/path/to/git |
| | + | |
| | + | ==assume-unchanged== |
| | + | This will make git to stop tracking changes on <file> |
| | + | git update-index --assume-unchanged <file> |
| | + | |
| | + | To include again this file run: |
| | + | git update-index --no-assume-unchanged <file> |
| | + | |
| | + | To view which files are not being tracked: |
| | + | git ls-files -v|grep '^h' |
| | + | ==Set upstream branch== |
| | + | git branch --set-upstream-to=origin/master |
| | + | |
| | + | ==Change last commit== |
| | + | git commit --amend |
| | + | |
| | + | ==Change older commit messages== |
| | + | git rebase -i HEAD~n |
| | + | Replace pick with reword before each commit message you want to change.<br /> |
| | + | Save and close the commit list file.<br /> |
| | + | In each resulting commit file, type the new commit message, save the file, and close it.<br /> |
| | + | git push --force |
| | + | |
| | + | |
| | + | == Create git aliases == |
| | + | |
| | + | === count-lines Alias === |
| | + | <syntaxhighlight lang="bash"> |
| | + | git config --global alias.count-lines "! git log --author=\"\$1\" --pretty=tformat: --numstat | awk '{ add += \$1; subs += \$2; loc += \$1 - \$2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\n\", add, subs, loc }' #" |
| | + | </syntaxhighlight> |
| | + | |
| | + | ==Cheat Sheet== |
| | + | http://wiki.herrerosolis.com/images/4/46/Git-cheat-sheet.pdf |