setup name and email
for a specific repository, navigate into it and type
git config user.name "your username"
git config user.email "[email protected]"
note add --global to make it global for new repositories
change your editor for commits
git config --global core.editor "pico"
get the remote repository url
git config --get remote.origin.url
stage all changes
git add -A
remove files
git rm 'files'
git commit -m "message"
the status of the repositiory
git status
see what files changed
git show --name-status 94eeb069e27da06413a0c30da36f6b8a4ec92e24
see what files changed and a diff that it had
git show 94eeb069e27da06413a0c30da36f6b8a4ec92e24
log of commit in the current branch
git log regular
git log --oneline pretty one line with commit message
git log -p <branch/ref> shows diff chronologically starting from ref
git log --oneline --decorate --graph shows graph
git log --pretty=format:'%h - %an [%ar] %s' see formated
git log --pretty=format:'%C(yellow)%h%C(reset) - %an [%C(green)%ar%C(reset)] %s' formatted with colors
git log --grep 'search text' -E -i --oneline search in commit history
git log --grep='search text' -i --all search in all commit history
git log -- file same logging but for one file
git log -S"Hello, World!" --stat see commits and files affecting a source code line matching the string
git log --stat shows also the files names changed and addition/deletion counts
git log --author=<name or email> search by author
git grep -i "text_to_search_in_code" search in code
git grep 'Build 0051' $(git rev-list --all)
git blame path/to/file shows recent Annotates each line in the given file with information from the revision which last modified the line
git show commit_hash see the diff that the commit induced
git show --name-only commit_hash see only changed files
git diff <branch_to_compare_with/hash> see the diff between current branch and the comapred
git diff <branch_to_compare_with/hash> --name-only see only the name of files changed between current branch and the comapred
git diff <branch_to_compare_with/hash> -- <file_path> see the diff of a file between current branch and the comapred
if you staged(added) a file and want to unstage it use
git reset -- path/to/file
if you want to unstage but keep the changes in the working directory
git reset --soft -- path/to/file
if you made changes to a file and haven't staged it yet and you want to undo changes use
git checkout -- path/to/file
if you commited and want to undo the commit
git reset HEAD^
to make sure you uncommit but keep the changes in the working tree
git reset --soft HEAD^
git commit --amend
push the branch to remote repository, -u tells git to remember the upstream reference for next time
git push -u origin <branch_name_or_master>
git push is the same as git push origin
or you can define that git push will always push the current branch to a branch with the same name
git config --global push.default current
push to the upstream remote if they have the same name(default with Git 2.0)
git config --global push.default simple
add a remote repository, so we can push into
git remote add origin https://github.com/try-git/try_git.git
git remote show origin displays info for your remote origin repo.
I typically use this when I want to get the URL or the remote repo,
or to enter new username password when it has changed
git remote show origin
git remote show origin | grep "branch_name"
two scenarios:
- creating a new remote repo
echo "# sfly-quest" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/HendrixString/sfly-quest.git
git push -u origin master
- push to an exiting empty remote repo, that was not cloned.
git remote add origin https://github.com/HendrixString/sfly-quest.git
git push -u origin master
- clone a remote repository, so we can push into
git clone https://github.com/try-git/try_git.git <optional_local_folder>
The git fetch command imports commits from a remote repository into your local repo. The resulting commits are stored as remote branches instead of the normal local branches that we’ve been working with. This gives you a chance to review changes before integrating them into your copy of the project.
Fetch all of the branches from the current repository
git fetch <remote> (usually origin)
fetch a specific branch.
git fetch <remote> <branch-name> (usually origin)
example
# checkout into local master branch
git checkout master
# fetch/uodate the local remote master branch reference
git fetch origin master
# Squash commits, fix up commit messages etc. like merge
git rebase -i origin/master
git push origin mastermerge a local branch with another.
example: the latest updates that were fetched from a remote
git checkout <branch_1>
# update the local remote branch tracking
git fetch origin <branch_2>
# review the changes that were added to the remote branch
git log --oneline <branch>..origin/<branch_2>
# merge this update
git merge origin/<branch_2>merge the master with a local branch
git checkout master
git merge my_local_hotfix_branchgit pull
git pull <remote> <branch>
git checkout branch_to_apply_commit_onto
git cherry-pick commit_hash
new branch, doesn't checkout
git branch <new-branch>
delete local existing branch
git branch -d <existing-branch>
delete remote existing branch
git push origin --delete <existing-branch>
show the remote branches
git branch -r
# origin/master
# origin/develop
# origin/some-featureshow the local branches
git branch
show all of the local and remote branches
git branch - a
show your current branch
git branch -vv | grep \*
- checkout existing branch
git checkout <existing-branch> - checkout a new branch from the current branch
git checkout -b <new-branch>
example
# This will fetch all of the remote branches for you and update other tracked branches
git fetch origin
# see the branches available for checkout
git branch -v -a
# checkout a remote branch
git checkout -b test origin/test
git diff HEAD
How about (assuming you're currently on branch configUpdate):
git fetch
git rebase origin/master
In a nutshell:
-
git merge branchnametakes new commits from the branchbranchname, and adds them to the current branch. If necessary, it automatically adds a "Merge" commit on top. -
git rebase branchnametakes new commits from the branchbranchname, and inserts them "under" your changes. More precisely, it modifies the history of the current branch such that it is based on the tip ofbranchname, with any changes you made on top of that. -
git pullis basically the same asgit fetch; git merge origin/master. -
git pull --rebaseis basically the same asgit fetch; git rebase origin/master.
So why would you want to use git pull --rebase rather than git pull? Here's a simple example:
-
You start working on a new feature.
-
By the time you're ready to push your changes, several commits have been pushed by other developers.
-
If you
git pull(which uses merge), your changes will be buried by the new commits, in addition to an automatically-created merge commit. -
If you
git pull --rebaseinstead, git will fast forward your master to upstream's, then apply your changes on top.
use git log to inspect changes and gather commit hashes
git log -p build.gradle
- undo unstaged changes to a file or folder
git checkout <commit> file_name - revert to another commit
git reset <commit> path/to/unwanted_file