Setting Up Git
git config --list – List all current Git configurations
git config --global user.email – Check user email
git config --global user.name – Check username
git config --global user.name "myname" – Change username, for all repo
git config --global user.email "email@example.com" – Change user email, for all repo
git config user.<email |name> "email@example.com" – For only current repo
git config --global core.autocrlf <true | input | false> – Configure line ending of file
true, then Git will auto-convert CRLF line endings (Windows) into LF (Linux) when you add a file to the index and auto-convert back to CRLF on workspace. If set it to input, then Git will Only convert CRLF to LF when commit. If you set it to false, Git will not do conversion.https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important
See Information in Git
git show – Show some useful info in local git
git status – Show branch, working status
git ls-files . --ignored --exclude-standard --others – List ignored files
git ls-files . --exclude-standard --others – List untracked files
Changes Between Commits (file changes)
git diff <files> – show what have changed for modified files that haven’t been staged (modified files in git status)
git diff --stat <files> – show statistics of files change
$ git diff --stat backup.sql
backup.sql | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
git diff origin/master..HEAD – Show change detail of commits for unpushed (Unsynchronized Changes) commits
Commit History
git log – List commits made in that repository in reverse chronological order
git log -p -2 – List commits and shows the difference (the patch output) introduced in each commit. Limit the number of log entries displayed, such as -2 will show only the last two entries
git log --stat – See some abbreviated stats for each commit
git log origin/master..HEAD – Show commit message for unpushed (Unsynchronized Changes) commits
Remote’s Repository
git remote -v – Check remote repo this git project associate with
git remote rm origin – Remove local git project origin (then can add a remote origin later)
git remote add origin https://github.com/USERNAME/REPOSITORY.git – Add remote repo in Github to the origin of this local Git project
git remote set-url origin https://github.com/USERNAME/REPOSITORY.git – To Http
git remote set-url origin git@github.com:USERNAME/REPOSITORY.git – To SSH
Working with Git
git status – Show status of current environment
git add <file | . > – Add a modified file or all files (using .) to the stage area
git reset -q HEAD [files] – Remove all staged files or specific files from stage area
git commit -m "a message" – Commit the changes of staging files to local repository
git stash – Discard all local changes, but save them for possible re-use later
git checkout -- <file> – Discarding local changes (permanently) to a file
git checkout -- . – Discarding local changes (permanently) to all files
git clean -df – Remove all untracked folders/files from the repo
git rm -r --cached <file or folder name> – Remove file or folder from being tracking
git reset --hard – Discard all local changes to all files permanently
Rollback to a previous git comment (need a commit -id)
git reset --hard <old-commit-id>
git reset --hard 57e86ca # rollback to commit 57e86ca
# then push to remote with -force to overwrite
git push -f <remote-name> <branch-name>
To clear all updates made to the current repo:
git checkout -- .
git clean -df
git add -f) to the set of files tracked by git, however git will continue to track any files that are already being tracked.
Cloning Repository
git clone git@github.com:karanokara/Hello-world.git – Clone from GitHub to current folder, using SSH key, create a new folder as the repo name as ‘Hello-world’
git clone user@123.123.0.123:/Hello-world.git hello – Clone from remote host, using SSH key, to current user’s folder ‘hello’, or create it
git clone https://github.com/karanokara/repo.git – Clone from GitHub, using https, will prompt for username and password
Pull Repository
git pull <remote-name> <branch-name> – Pull the latest commit from origin remote repository, usually from “master” branch
git pull github new-feature – Pull the latest commit from “github” remote repository, from “new-feature” branch
Push Repository
git push [-u: enter account credential] <remote-name> <branch-name> – Push local Committed updates to the origin remote repository, branch name may be “master” or others
Working with Branches
git fetch -a – Fetch remote branches to local
git branch [-a: local & remote; -r: remote] – Listing branches (local, -a for local & remote)
git checkout <branch-name> – Switching branch, “branch-name” or “origin/<branch-name>”
git checkout -b <branch-name> – Create new branch base on current branch
There are 3 different branches: Local, Local remote-tracking, Remote origin.
git branch -d <branch-name> – Delete a local branch
git branch -d -r <remote-name/branch-name> – Delete a remote-tracking branches (need to push to delete its remote branch)
git push origin -d <branch_name> – Delete a remote branch (and also its remote-tracking branch)
Removes/delete (Prunes) all obsolete local remote-tracking branches for any remote branches that no longer exist on the remote
git remote prune origin
# or
git fetch origin --prune
git fetch origin -p
Generating SSH key and Adding to the ssh-agent
After adding ssh-rsa key to Github, no need to type password when there is a push update to a remote repository.
ssh-keygen -t rsa [-f <filename>] -b 4096 -C "your_email@example.com" – Generating a new SSH key ( whatever email, doesn’t matter, e.g. root@toshiba )
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again] – Hit enter without passphrase here
eval $(ssh-agent -s) – Ensure the ssh-agent is running with output as Agent pid 12345
ssh-add ~/.ssh/id_rsa – Add generated SSH private key to the ssh-agent.
Finally, Copy content of cat ~/.ssh/id_rsa.pub, the public ssh-rsa key to the Github account.
For automatically adding private key to the ssh agent every time login via SSH:
Config the SSH startup script sudo vim ~/.bashrc, add to the end of file:
eval $(ssh-agent -s) # Open a ssh agent
ssh-add /home/user/.ssh/id_rsa # Add pri key to agent
To delete the invalid key such as after renewing a key:
ssh-keygen -R <hostname/ip>
git@github.com: Permission denied (publickey)check if doing
git pull or git push need to use sudo, if so, do sudo chmod 777 -R .git to avoid using sudo on git pull.– The keys that generate need to be named
id_rsa (private) and id_rsa.pub (public) to get communicate with Github.– Try clearing known_host and then pull a new repo to update the known_host file












