Git

From Chorke Wiki
Jump to navigation Jump to search
git config --global user.name "Full Name"
git config --global user.email "[email protected]"

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

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 Stash

git stash apply stash@{index}
git stash drop  stash@{index}
git stash pop   stash@{index}

git stash clear
git stash list
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 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 - sign before the value of --sort parameter

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

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 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
merge commit from another branch
git cherry-pick <commit>

Merge Commits

Let say there is a new feature needed to develop yourself. During the time of feature creation you have created git checkout -b your_private_branch branch from any branch like staging or develop. During the time of your development let say you have added 50 comments for your own tracking. Now you needs to delete 49 comments and have append your comments with the first comments. After that you need to update your central repository. For safety purpose you might need check status and log to ensure your are not doing any wrong.

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 

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

git config pull.rebase false
git config pull.rebase true
git config pull.ff only

Global/Workstation/User Wise

git config --global pull.rebase false
git config --global pull.rebase true
git config --global pull.ff only

Strategy

merge   (default)
rebase  (custom )
fast-forward only

Knowledge

discard changes
git checkout master -f
delete and recreate
git branch -d staging
git branch -D staging
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'

References