This is a collection of common git commands that I use very often in my daily work. I have only touched on GitHub and find it fairly sufficient for my needs, and thus this post will base on GitHub as well.
Case 1: start a new repository
Let’s say we want to upload ~/analysis/ to GitHub
On GitHub: create a new repository
The only things I will set here are the repository name and the choice whether it is public or private. I do not initialise the repository with a README if I have the files in a local folder (which is often the case because I get work done on my computer before sharing them on GitHub). Creating any files in GitHub repository will cause clashes (more below).
On Local machine: create a git repository and push
change directory to the directory that will be uploaded. So in this case we need to
cd ~/analysis
git init
note create a .gitignore file now to exclude selected files from being uploaded (more below)git add .
will add all files under current directory except those in .gitignore. Alternatively,git add *files*
can be used to add specific filesgit commit -m "some message"
to commit the current added changes to local repositorygit push origin master
to push the changes to online GitHub repository.origin master
can be replaced by any other branch nameWhen the online repository has been updated elsewhere, use
git pull origin master
to update the changes to local repository
Case 2: download online repository
Use git clone *url*
command to sync the online repository to local repository. Downloading code as a zip file is not recommended because that will automatically set up the git repository that allows you to use git in the directory.
Case 3: change online repository address
Sometimes online repository address can be changed when you change https to ssh, or when you change your username or any other secnario. To update the online repository address in local repository, use git remote set-url origin *url*
. If you just want to view the current url, use git remote get-url origin
Case 4: branching and merging
Branching is useful to maintain the original structure of the working software while working on new features on a separate copy of the software - the branch.
git checkout -b branch_name
creates a new branch and switch to that branch. Remove-b
if the branch already exists.git branch
shows all branches and the one that I am currently ongit branch -m old_name new_name
renames the branchgit push origin :old-name new-name
delete the old branch in the remote repositorygit push origin -u new-name
set the remote repository to be pushed to in the current local branch to be the new branch
merge and merge conflicts
First, before we resolve merge conflicts, it is best to understand what a merge conflict is in the first place. This page explains that.
This tutorial is technically still readable.
How to use meld
Meld indicates to you where the changes are by highlighting them. Just follow them and click on the arrows/edit the scripts by hand.
Use this to set up meld as the default merge tool. git checkout – .
overwrite remote repository with local repository
git push --force
Case 5: delete a branch both locally and remotely
$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>
Case 6: Go back to a previous commit
REfer to the selected answer here
Case 7: made changes but want to save the changes to another repository instead.
Notes
One-command push
Sometimes it may be tedious to key in three commands to push just one change. In this case, you can create a function to complete all steps at once.
function lazygit() {
git add .
git commit -a -m "$1"
git push
}
.gitignore
I often choose to ignore everything except the most often used ones.
*
!exception_files
Resolve clashes
The way to resolve the clash is to pull and merge the files in GitHub. I will update when the error appears again.
Remove large files
This is a modified instruction for bfg without needing to create a new git repo
In the desired directory
- first, run
git gc
- run two command as instructed
java -jar bfg.jar --strip-blobs-bigger-than 100M
git reflog expire --expire=now --all && git gc --prune=now --aggressive
)
- if there are “dirty commits”, you can remove the files’ git history via
git rm --cached file_name
without removing the files- commit
- then use the command again
- if there are no dirty commits, you can push it to your remote repo
FAQ on Git
- what is origin origin is a local alias set as a key in place of the remote repository URL. It refers to the remote copy of the git repository.
- what does “Your branch is up-to-date with ‘origin/master’.” mean?
The branch is up-to-date with the latest commit reference that was fetched last time with either
git fetch
orgit merge
.