236 lines
7.1 KiB
Plaintext
236 lines
7.1 KiB
Plaintext
---
|
|
tags: [ vcs ]
|
|
---
|
|
# To set your identity:
|
|
git config --global user.name <name>
|
|
git config --global user.email <email>
|
|
|
|
# To set your editor:
|
|
git config --global core.editor <editor>
|
|
|
|
# To enable color:
|
|
git config --global color.ui true
|
|
|
|
# To stage all changes for commit:
|
|
git add --all
|
|
|
|
# To stash changes locally, this will keep the changes in a separate changelist
|
|
# called stash and the working directory is cleaned. You can apply changes
|
|
# from the stash anytime
|
|
git stash
|
|
|
|
# To stash changes with a message:
|
|
git stash push -m <message>
|
|
|
|
# To list all the stashed changes:
|
|
git stash list
|
|
|
|
# To apply the most recent change and remove the stash from the stash list:
|
|
git stash pop
|
|
|
|
# To apply any stash from the list of stashes. This does not remove the stash
|
|
# from the stash list
|
|
git stash apply stash@{6}
|
|
|
|
# To commit staged changes:
|
|
git commit -m <message>
|
|
|
|
# To edit previous commit message:
|
|
git commit --amend
|
|
|
|
# Git commit in the past
|
|
git commit --date="`date --date='2 day ago'`"
|
|
git commit --date="Jun 13 18:30:25 IST 2015"
|
|
# more recent versions of Git also support --date="2 days ago" directly
|
|
|
|
# To change the date of an existing commit:
|
|
git filter-branch --env-filter \
|
|
'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
|
|
then
|
|
export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
|
|
export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
|
|
fi'
|
|
|
|
# To remove staged and working directory changes:
|
|
git reset --hard
|
|
|
|
# To go 2 commits back:
|
|
git reset --hard HEAD~2
|
|
|
|
# Checkout the fb branch, and rebase from <remote>
|
|
git reset --hard <remote>/<branch>
|
|
|
|
# To revert first/initial commit on a branch:
|
|
# Running git reset --hard HEAD~1 will give error:
|
|
# fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
|
|
git update-ref -d HEAD
|
|
|
|
# To remove untracked files:
|
|
git clean -f -d
|
|
|
|
# To remove untracked and ignored files:
|
|
git clean -f -d -x
|
|
|
|
# To push to the tracked main branch:
|
|
git push origin main
|
|
|
|
# To push to a specified repository:
|
|
git push git@github.com:<username>/<repo>.git
|
|
|
|
# Tags: Tag a commit
|
|
git tag -a <tag> <commit> -m "<commit message>"
|
|
|
|
# Tags: To push a tag to remote:
|
|
git push origin <tagname>
|
|
|
|
# Tags: To delete a tag <tagname> on remote
|
|
git push --delete origin <tagname>
|
|
|
|
# Tags: To delete a tag locally
|
|
git tag -d <tagname>
|
|
|
|
# To force a push:
|
|
git push -f
|
|
|
|
# Branches: To delete the branch <branch>:
|
|
git branch -D <branch>
|
|
|
|
# Branches: To delete a local <branch>:
|
|
git branch -d <branch>
|
|
|
|
# Branches: To delete a remote branch <branch>:
|
|
git push --delete origin <branch>
|
|
|
|
# Branches: To delete all branches on remote that are already merged:
|
|
git branch --merged | egrep -v "(^*|main|dev)" | xargs git branch -d
|
|
|
|
# Branches: To make an exisiting branch track a remote branch:
|
|
git branch -u upstream/foo
|
|
|
|
# To see who commited which line in a file:
|
|
git blame <file>
|
|
|
|
# To sync a fork with the main repo:
|
|
git remote add upstream git@github.com:<username>/<repo>.git # Set a new repo
|
|
git remote -v # Confirm new remote repo
|
|
git fetch upstream # Get branches
|
|
git branch -va # List local - remote branches
|
|
git checkout main # Checkout local main branch
|
|
git checkout -b new_branch # Create and checkout a new branch
|
|
git merge upstream/main # Merge remote into local repo
|
|
git show 83fb499 # Show what a commit did.
|
|
git show 83fb499:path/fo/file.ext # Shows the file as it appeared at 83fb499.
|
|
git diff branch_1 branch_2 # Check difference between branches
|
|
git log # Show all the commits
|
|
git status # Show the changes from last commit
|
|
|
|
# To view the commit history of a set of files:
|
|
git log --pretty=email --patch-with-stat --reverse --full-index -- Admin\*.py > Sripts.patch
|
|
|
|
# To import commits from another repo:
|
|
git --git-dir=../some_other_repo/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k
|
|
|
|
# To view commits that will be pushed:
|
|
git log @{u}..
|
|
|
|
# To view changes that are new on a feature branch:
|
|
git log -p feature --not main
|
|
git diff main...feature
|
|
|
|
# To perform an interactive rebase for the prior 7 commits:
|
|
git rebase -i @~7
|
|
|
|
# To diff files WITHOUT considering them a part of git:
|
|
# This can be used to diff files that are not in a git repo!
|
|
git diff --no-index path/to/file/A path/to/file/B
|
|
|
|
# To pull changes while overwriting any local commits:
|
|
git fetch --all
|
|
git reset --hard origin/main
|
|
|
|
# To pull down a remote branch, but rebase any locally differing commits onto
|
|
# the top of the incoming commits:
|
|
git pull <remote> <branch> --rebase
|
|
|
|
# To update all submodules:
|
|
git submodule update --init --recursive
|
|
|
|
# To perform a shallow clone to only get latest commits:
|
|
# (helps save data when cloning large repos)
|
|
git clone --depth 1 <remote-url>
|
|
|
|
# To unshallow a clone:
|
|
git pull --unshallow
|
|
|
|
# To create a bare branch (one that has no commits on it):
|
|
git checkout --orphan branch_name
|
|
|
|
# To checkout a new branch from a different starting point:
|
|
git checkout -b main upstream/main
|
|
|
|
# To remove all stale branches (ones that have been deleted on remote): So if
|
|
# you have a lot of useless branches, delete them on Github and then run this:
|
|
git remote prune origin
|
|
|
|
# To prune all remotes at once:
|
|
git remote prune $(git remote | tr '\n' ' ')
|
|
|
|
# Revisions can also be identified with :/text
|
|
# So, this will show the first commit that has "cool" in their message body
|
|
git show :/cool
|
|
|
|
# To undo parts of last commit in a specific file:
|
|
git checkout -p HEAD^ -- /path/to/file
|
|
|
|
# To revert a commit and keep the history of the reverted change as a separate revert commit:
|
|
git revert <commit SHA>
|
|
|
|
# To pick a commit from a branch to current branch. This is different than
|
|
# merge as this just applies a single commit from a branch to current branch:
|
|
git cherry-pick <commit SHA1>
|
|
|
|
# Change author of a commit:
|
|
git commit --amend --author="Author Name <email@address.com>"
|
|
|
|
# The GPG key used for signing your commits
|
|
git config --global user.signingkey 0A46826A
|
|
|
|
# Sign new tags:
|
|
git tag -s v1.5 -m 'my signed 1.5 tag'
|
|
|
|
# Sign a commit:
|
|
git commit -a -S -m 'Signed commit'
|
|
|
|
# Check any signatures it finds and list them in its output:
|
|
git log --pretty="format:%h %G? %aN %s"
|
|
|
|
# Defined the key to use for signing commits:
|
|
git config user.signingkey [KEYID]
|
|
|
|
# Set signing of commits globally:
|
|
git config --global commit.gpgsign true
|
|
|
|
# To list unstracked files:
|
|
git ls-files --others --exclude-standard
|
|
|
|
# Make a local branch track a remote branch
|
|
git branch --set-upstream-to=origin/main main
|
|
|
|
# Fetch the changes from the remote
|
|
git fetch origin
|
|
|
|
# Show commit logs of changes
|
|
git log HEAD..origin/main
|
|
|
|
# Show diffs of changes, use either to show each patch
|
|
git log -p HEAD..origin/main
|
|
|
|
# Show diffs of changes, to show a single diff
|
|
git diff HEAD...origin/main
|
|
|
|
# Apply the changes by merge..
|
|
git merge origin/main
|
|
|
|
# .. or just pull the changes
|
|
git pull
|