Ref.
Configuration
- Stages: worktree, staged(index), HEAD
.bashrc & .zshrc
git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
git_branch() {
branch=$(git symbolic-ref --short HEAD 2> /dev/null)
if [[ $branch == "" ]]; then
:
else
echo '('$branch')'
fi
}
setopt PROMPT_SUBST
PROMPT='[%F{green}%d%f]%F{red} $(git_branch)%f
$ '
PS1='\[\033[32m\][\w]\[\033[31m\] $(git_branch)\[\033[0m\]\n$ '
Global
git config --local --list # List Configs for repos. config file "repo/.git/config"
git config --global --list # List Configs for global config file "~/.gitconfig"
git config --system --list # List Configs for System config file "installed/git/etc/gitconfig"
-----------------------------------------------------------------------------------------------------
git config --global --edit # Edit Configs
git config --global user.name # Show config for user.name
git config --global user.name "King" # Set Value "King" to user.name
git config --global --unset user.name # Unset Value from user.name
git config --global user.name "Samer Hijazi"
git config --global user.email "samer.hijazi@samerhijazi.net"
-----------------------------------------------------------------------------------------------------
git config --global alias.ss 'status -s'
git config --global alias.rs 'reset --hard origin/master'
git config --global alias.cm 'commit -m'
git config --global alias.cp '!git commit -a -m "Update $1" && git push'
-----------------------------------------------------------------------------------------------------
git config --global core.editor "nano"
git config --global core.editor "vim"
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
-----------------------------------------------------------------------------------------------------
git config --global http.proxy $PROXY_URL
git config --global https.proxy $PROXY_URL
-----------------------------------------------------------------------------------------------------
git config --global core.autocrlf true # Working on Windows, Linux, macOS Maschines.
git config --global core.safecrlf false # Disable showing Warnning for LF
git config --global core.longpaths true
git config --global core.compression 9 # compression for speed up push process.
-----------------------------------------------------------------------------------------------------
git config --global diff.tool bc
git config --global difftool.bc.path "C:/Program Files/Beyond Compare 4/bcomp.exe"
-----------------------------------------------------------------------------------------------------
git config --global merge.tool bc
git config --global mergetool.bc.path "C:/Program Files/Beyond Compare 4/bcomp.exe"
-----------------------------------------------------------------------------------------------------
git config --global advice.addIgnoredFile false # Turen off advice for adding Ignored files
-----------------------------------------------------------------------------------------------------
git commit --amend --reset-author
# https://mattferderer.com/fix-git-self-signed-certificate-in-certificate-chain-on-windows
git config --global http.sslVerify false
Credential
Refs
Settings
git config --global --edit
git config --global credential.helper cache ### keeps credentials in memory for a 15min (default cache timeout).
git config --global credential.helper 'cache --timeout=3600' ### keeps credentials in memory for a 36min.
git config --global credential.helper store ### save entered password in (~/.git-credentials) by default.
git config --global credential.helper 'store --file ~/.my-credentials'
git config --global credential.helper '/usr/local/share/gcm-core/git-credential-manager-core' ### Set "Git Credential Manager" on Linux.
git config --global credential.credentialStore secretservice ### GUI Storage für Linux
git config --global credential.helper '/mnt/c/git/mingw64/bin/git-credential-manager-core.exe' ### Set "Git Credential Manager" on WSL.
ssh
type %userprofile%\.ssh\id_rsa.pub | clip
cat %userprofile%\.ssh\id_rsa.pub | clip
chmod 600 ~/.ssh/key_github
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/key_github
ssh -T git@github.com
ssh -T git@gitlab.com
ssh -T git@bitbucket.org
git remote set-url origin https://github.com/username/repository-name.git ### For SSH-Connection
git remote set-url origin git@github.com:username/repository-name.git ### For HTTPS-Connection
.getignore
folder/
.file
*.exe
Commands-Core
LifeCycle
git clone https://github.com/samerhijazi/automation.git -b branchname ./local-folder
git pull
git add README.md
git commit -m "First commit"
git push -u origin master
Initialisieren
git init --bare # Initial Repo for remote
git init # Initial Repo for local
--------------------------------------------------------
git remote add origin https://samerhijazi@gitlab.com/samerhijazi/public.git ### Add URl for remote.
git remote set-url origin https://samerhijazi@gitlab.com/samerhijazi/public.git ### Change URL for remote.
Clone
git clone https://github.com/samerhijazi/automation.git -b branchname ./local-folder
git clone ssh://ssh-w0000000@servername.com/www/htdocs/w0000000/repository/git/projectname.git
git clone -b <branchname> <remote-repo-url>
git clone --depth 1 --filter=blob:none <repository-url> <destination-directory>. ### Clone with leates commint
Checkout
- HEAD reflects 'git checkout'
git checkout main # checkout main-Branch@HEAD
git checkout main^ # moves HEAD 1-commit back from main-Branch
git checkout main~4 # moves HEAD 4-commits back from main-Branch
git branch -f main HEAD~3 # moves (by force) the main-Branch 3-commits back from HEAD.
Branch
git branch # list branches local.
git branch -r # list branches remote.
git branch -a # list branches all (local & remote).
---
git branch $NAME_BRANCH_NEW # Create a new Branch
git switch $NAME_BRANCH_NEW # Switch to branch
---
git checkout $NAME_BRANCH_EXISIT # checkout exiting branch
git checkout -b $NAME_BRANCH_NEW # create a new branch from HEAD and then checkout <new-branch>
git checkout -b $NAME_BRANCH_NEW $NAME_BRANCH_EXISIT # create a new branch from $NAME_BRANCH_EXISIT and then checkout $NAME_BRANCH_NEW
---
git push --set-upstream origin $NAME_BRANCH_NEW # Push the $NAME_BRANCH_NEW branch and set the remote as upstream.
git branch -m $NAME_OLD $NAME_NEW # To rename a local branch
git push origin -u $NAME_OLD :$NAME_NEW # To rename a remote branch
git branch -d $NAME_BRANCH_TO_DELETE # Delete a branch on local.
git push origin --delete $NAME_BRANCH_TO_DELETE # Delete a branch on remote.
git push origin :$NAME_BRANCH_TO_DELETE # Delete a branch on remote.
Merge
git checkout <branch_merge_to> # change to branch where the merge will be done
git merge --no-ff <branch_merge_from> # merge <branch_merge_from> in <branch_merge_to>
git push
...
git merge --abort # returen to the state before starting the merge.
git reset --hard # roll back to the commit before the merge.
Taging
git tag # List tages
git tag -a v2021.09.03 -m "Messages" # Add tag
git tag -m $TAG_OLD $TAG_NEW # Rename tag.
git push origin $TAG # Push a current tag to remote.
git push origin --tags # Push all tags to remote.
---
git fetch # Fetch remote All tags.
git tag -d $TAG_TO_DELETE # Delete a tag on local.
git push origin :refs/tags/$TAG_TO_DELETE # Delete a tag on remote variant 1.
git push origin --delete $TAG_TO_DELETE # Delete a tag on remote variant 2.
---
git tag -d $(git tag -l) # Delete all local tags.
git push origin --delete $(git tag -l) # Delete all remote tags.
Remove & Rename
git checkout <branch-name>
git rm -r <file-to-remove> # remove file
git mv <filename-old> <filename-new> # rename file
git clean -fd # remove directories forced
git commit -m "My Massage"
git push origin <branch-name>
Stash
git stash # Save all local changes und remove them from workspace.
git fetch # fetch from the default remote, origin
Reset
git reset HEAD~1 # Moves branch reference 1-commit back.
git reset * # Undo "git add *"
git reset --hard origin/master # Reset your current branch (master) to origin's master
---
git revert HEAD # Undo last commit and make ready for remote.
Clean
git clean -f # Remove untracked files with force (-f).
git clean -f -d # Remove untracked files and directories (-d).
git clean -f -x # Remove ignored and non-ignored files (-x).
git clean -f -X # Remove ignored files only (-X).
Remote
git remote -v # View remotes.
git remote add $REMOTE_NAME $REMOTE_PATH # Add remote.
git remote rm $REMOTE_NAME # Delete remote.
git remote rename $REMOTE_NAME_OLD $REMOTE_NAME_NEW # Change remote name from 'origin' to 'destination'
---
git remote prune origin --dry-run
git remote prune origin
Fetch & Pull & Push
git fetch # Download new data (commits, files, and refs.) from a remote-repository into local-repository.
git fetch --prune # Remove remote branches that not longer have a counterpart.
---
git pull # Download new data (commits, files, and refs.) from a remote-repository into local-repository and integrate the new data in working-files.
git pull --rebase origin master # get changes from remote master. And commit it for local/user commit.
---
git push # Upload local-repository content to a remote-repository.
git push --force-with-lease # To avoid overwrite history from rebase, Lease entsure that history dokumented.
Reset local workspace
git clean -fxd ### Clean ignored and non-ignored files/directoryes.
git reset –-hard ### Reset current HEAD to the specified state.
git restore . ### Restore working tree files.
git checkout . ### same as (git restore .).
Commands-Plus
Submodule
cd /path/to/parent-repo
git submodule add -b <branch> <repository> <path/to/submodule>
git submodule update ### Update submodule in the file ".gitmodules"
------------------------------------------------------------------------------------
git clone --recursive ### clone a Git repository that includes submodules.
Git branching model
Branch Feature
git checkout -b myfeature develop
...
git checkout develop
git merge --no-ff myfeature
git branch -d myfeature
...
git push origin develop
Branch Release
git checkout -b release-1.2 develop
git commit -a -m "Bumped version number to 1.2"
...
git checkout master
git merge --no-ff release-1.2
git tag -a 1.2
...
git checkout develop
git merge --no-ff release-1.2
git branch -d release-1.2
Branch HotFix
git checkout -b hotfix-1.2.1 master
git commit -a -m "Bumped version number to 1.2.1"
...
git checkout master
git merge --no-ff hotfix-1.2.1
git tag -a 1.2.1
...
git checkout develop
git merge --no-ff hotfix-1.2.1
git branch -d hotfix-1.2.1
CICD
git --no-pager show -s --format=\'%ae\' # Disaply email address last commit
git config user.name # Dispaly email address user
Tweaks
New Empty Branch
git switch --orphan <new branch>
git commit --allow-empty -m "Initial commit on orphan branch"
git push -u origin <new branch>