Git
git config --global user.name "Full Name" git config --global user.email "email.id@academia.chorke.org" git config --global pull.rebase true git config --global core.autocrlf input git config --global init.defaultBranch develop git config advice.skippedCherryPicks false undo or remove from index git rm --cache src/test/resources/application.properties undo or redo assume unchanged git update-index --no-assume-unchanged src/main/resources/application.properties git update-index --assume-unchanged src/main/resources/application.properties list of assume unchanged files git ls-files -v|grep '^h' |
Git Ignore
|
Git Ignore | |
|---|---|
out/ *.iml *.ipr *.iws .idea/* cmake-build-*/ .idea_modules/ fabric.properties crashlytics.properties atlassian-ide-plugin.xml crashlytics-build.properties com_crashlytics_export_strings.xml clear metadata rm -rf */out */*.iml */*.ipr */*.iws */.idea */cmake-build-* */.idea_modules |
|
Git Alias
|
Git Alias | |
|---|---|
git config --global alias.lo "log --oneline" git log --oneline git lo |
git config --global --unset-all alias.lo git config --global --unset alias.lo git lo |
git config --global alias.lp 'log --pretty="%h %cD %cn %s"' git lp |
git config --global --unset-all alias.lp git lp |
git config --global alias.dtag "describe \ --tags $(git rev-list --tags --max-count=1)" |
git config --global --unset-all alias.dtag git dtag |
Git Stash
|
Git Stash | |
|---|---|
git config --global alias.lo "log --o
git stash apply stash@{index}
git stash drop stash@{index}
git stash pop stash@{index}
git stash clear
git stash list
git stash
|
git apply --3way ~/.chorke/tmp/academia/patch/v1.0.00.patch
git apply ~/.chorke/tmp/academia/patch/v1.0.00.patch
git diff > ~/.chorke/tmp/academia/patch/v1.0.00.patch
git stash apply stash^{/stash_v1.0.00}
git stash push -m stash_v1.0.00
git stash drop
|
Git Tag
|
Git Tag |
|---|
annotated tag git tag -a v1.5_initial_setup -m 'initial setup' git tag -a v1.5_initial_setup lightweight tag git tag v1.5_initial_setup |
|
By default git sort order is ascending, for descending order we need to add |
git tag --sort=taggerdate
git tag -l --sort=taggerdate
git tag -l --format='%(taggerdate) %(refname)'
git tag -l --format='%(taggerdate) %(refname)' --sort=taggerdate
# ascending order
git tag -l --format='%(taggerdate)%09%(refname)' --sort=taggerdate
git tag -l --format='%(creatordate)%09%(refname)' --sort=creatordate
# descending order
git tag -l --format='%(taggerdate)%09%(refname)' --sort=-taggerdate
git tag -l --format='%(creatordate)%09%(refname)' --sort=-creatordate
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
git tag --format='%(creatordate:short)%09%(refname:strip=2)' --sort=creatordate
git tag --format='%(taggerdate:short)%09%(refname:strip=2)'
git tag --format='%(taggerdate:short)%09%(refname:strip=2)' --sort=taggerdate
git log --tags --simplify-by-decoration --pretty='format:%ai %d'
git log --tags --simplify-by-decoration --pretty='format:%ai %h %d' --date-order --graph
|
Git Branch
|
Git Branch | |
|---|---|
create and checkout a new branch git checkout -b new_branch_name base_branch_name git checkout -b new_branch_name renaming and delete branch git branch -m old_branch_name new_branch_name git branch -D branch_to_delete_without_merge_status git branch -d branch_to_delete git push -d origin branch_to_delete git push origin --delete branch_to_delete renaming branch name git checkout develop;\ git checkout -b new-dev-branch old-dev-branch;\ git push origin -d old-dev-branch;\ git push origin new-dev-branch |
|
Git Rebase
|
Git Rebase | |
|---|---|
git checkout <user-branch> git pull --rebase origin <source-branch> user branches merge into official branch ───────────────────────────────────────── merge : user-branch » develop|master merge : user-branch » staging|uat|production official branches rebase into user branch ────────────────────────────────────────── rebase: user-branch « develop|master rebase: user-branch « staging|uat|production official branches merge into official branch ───────────────────────────────────────────── merge : develop » uat » production » master merge : staging » uat » production » master |
|
Git Commit
|
Git Commit | |
|---|---|
delete latest commit git reset --hard HEAD~1 rollback to the commit id git reset --hard <sha1-commit-id> delete commit from remote branch git push origin HEAD --force delete commit from local branch git checkout <your-branch> git fetch --all && git reset --hard origin/<your-branch> merge commit from another branch git cherry-pick <commit> |
|
Git Reflog
|
Git Reflog | |
|---|---|
restore commit git reflog git reset --hard <sha value> |
|
Git Amend Commit
|
Git Amend Commit | |
|---|---|
git commit --amend
git commit --amend -C HEAD
git push origin HEAD --force
# git push origin <working-branch> --force
|
|
Git Merge Commits
|
Git Merge Commits | |
|---|---|
|
Let say there is a new feature needed to develop yourself. During the time of feature creation you have created | |
| Merge Commits Into Single | |
Step: 1 git checkout <your_private_branch> git status git log Step: 2 git reset --soft <hash_of_first_commit> git status git log |
Step: 3 git commit --amend -m '<comment_about_feature>' git status git log Step: 4 (final) git push origin HEAD --force git status git log |
| Clean Dirty Branch & Start Again | |
|
For safety purpose you should check status and log to ensure your are not doing any wrong. Always be careful before | |
git stash git stash clear git checkout <any_other_branch> |
git branch -D <your_private_branch> git branch -d <your_private_branch> git checkout <your_private_branch> |
Git Copy Changes
|
Git Copy Changes |
|---|
diff changes: git diff > ~/Documents/ThinkPad_L14Gen3/my-diff-changes.txt scp legion:~/Documents/ThinkPad_L14Gen3/my-diff-changes.txt ~/Documents/ThinkPad_L14Gen3/ git apply ~/Documents/ThinkPad_L14Gen3/my-diff-changes.txt tracked changes only: git stash save my-tracked-changes git stash show -p > ~/Documents/ThinkPad_L14Gen3/my-tracked-changes.txt git stash pop scp legion:~/Documents/ThinkPad_L14Gen3/my-tracked-changes.txt ~/Documents/ThinkPad_L14Gen3/ git apply ~/Documents/ThinkPad_L14Gen3/my-tracked-changes.txt include untracked changes: git stash save --include-untracked my-untracked-changes git stash show -p > ~/Documents/ThinkPad_L14Gen3/my-untracked-changes.txt git stash pop scp legion:~/Documents/ThinkPad_L14Gen3/my-untracked-changes.txt ~/Documents/ThinkPad_L14Gen3/ git apply ~/Documents/ThinkPad_L14Gen3/my-untracked-changes.txt |
Git Warning
|
Git Warning | ||
|---|---|---|
|
Pulling without specifying how to reconcile divergent branches is discouraged. You can squelch this message by running one of the following commands sometime before your next pull: | ||
| Local/Project Wise | Global/Workstation/User Wise | Strategy |
git config pull.rebase false
git config pull.rebase true
git config pull.ff only
|
git config --global pull.rebase false
git config --global pull.rebase true
git config --global pull.ff only
|
merge (default) rebase (custom ) fast-forward only |
Git Archive Branch
|
Git Archive Reference | |
|---|---|
git branch
# feature-branch-01
# feature-branch-02
|
git for-each-ref refs/heads
git for-each-ref refs/remotes
git for-each-ref refs/archive
|
# create an archive reference
git update-ref refs/archive/feature-branch-01 \
feature-branch-01
|
# create an archive reference
git update-ref refs/archive/feature-branch-02 \
feature-branch-02
|
# delete branch from heads
git branch -D feature-branch-01
|
# delete branch from heads
git branch -D feature-branch-02
|
git for-each-ref refs/archive
# fbcbeddd9f8fd88ca4be2be97be9da9eaed0bff5 commit refs/archive/feature-branch-01
# 943bf8396c17ed135e8f4e8ada5d7ce744f8e98f commit refs/archive/feature-branch-02
| |
# restore an archive reference
git checkout -b feature-branch-01 \
refs/archive/feature-branch-01
|
# restore an archive reference
git checkout -b feature-branch-02 \
refs/archive/feature-branch-02
|
# delete an archive reference
git update-ref -d refs/archive/feature-branch-01
|
# delete an archive reference
git update-ref -d refs/archive/feature-branch-02
|
Rename a Git Remote
|
Rename a Git Remote | |
|---|---|
git remote rename <old-name> <new-name> git remote rename origin gitea_origin |
|
Git Https Remote Auth
|
Git Https Remote Auth |
|---|
CODECOMMIT_USERNAME='<username>';\
CODECOMMIT_PASSWORD='<password>';\
tee ${HOME}/.netrc >/dev/null <<EOF
machine git-codecommit.ap-southeast-1.amazonaws.com
login ${CODECOMMIT_USERNAME}
password ${CODECOMMIT_PASSWORD}
EOF
git pull origin master --rebase |
Git SSH Command
GIT_SSH_COMMAND="ssh\
-o StrictHostKeyChecking=no\
-o UserKnownHostsFile=/dev/null"\
git clone --depth=1 --single-branch\
--branch master git@scm.chorke.org:chorke/academia\
/config.git $HOME/.config/chorke/academia/config_master 2>/dev/null\
|| git -C $HOME/.config/chorke/academia/config_master pull
|
export GIT_SSH_COMMAND="ssh\
-o StrictHostKeyChecking=no\
-o UserKnownHostsFile=/dev/null";\
export GIT_CLONE_TARGET="${HOME}/.config/chorke/academia/config_master";\
export GIT_CLONE_SOURCE='git@scm.chorke.org:chorke/academia/config.git';\
git clone --depth=1 --single-branch --branch master $GIT_CLONE_SOURCE\
$GIT_CLONE_TARGET 2>/dev/null || git -C $GIT_CLONE_TARGET pull
|
Knowledge
|
Knowledge |
|---|
discard changes git checkout master -f delete and recreate git branch -d staging git branch -D staging debug ssh connection ssh -v git@bitbucket.org ssh -T git@bitbucket.org ssh -vT git@bitbucket.org git merge develop git fetch origin staging git checkout -b staging origin/staging git config --global init.defaultBranch master git stashing git stash; git checkout -b new_branch; git stash pop git add .; git commit -m "new feature added"; git push git remote -v;mv src/main/resources/application.properties ..;cd .. mv ../application.properties src/main/resources/ rebase vs merge git rebase master #all the updated commits of master will be available in the feature branch git merge --squash feature #all the feature commits replaced by a new commit in the master git commit -m 'feature merged with master branch' git checkout uat git pull --rebase origin staging |