Git best practice
Date: January 12th 2016
Last updated: January 12th 2016
Is there any best practice guidelines for using Git? No. However, this write-up, Commit Often, Perfect Later, Publish Once: Git Best Practices, will certainly help clean up my workflow. It's well worth a read, along with Pro Git.
The penny dropped for me when I realised I could be using git locally without pushing my work to a public remote repository. Each small change to my code using tools like pudb and pylint can be recorded with Git. Then, pushing the code to a remote repository when it's ready for public consumption.
The following list of commands provide a reference for starting out with Git: Make a repository
and/or clone to your local workspace. Note these examples use remote repositories from Github and Bitbucket. All commands are executed at the command line.
# CLONE a repository cd path/to-repo/destination-folder git clone https://github.com/USER-NAME/REPO-NAME # My example git clone https://github.com/rayblick/Virtual-Ecologist # Or CREATE new project folder locally cd path/to-repo/ mkdir REPO-NAME # create new folder cd REPO-NAME # move into folder git init # initialise git # create and add readme file echo "# REPO-NAME" >> README.md git add README.md # or add all files in your local repository git add . # to REMOVE a file from your local repository git reset HEAD FILE-NAME # HEAD is a symbolic reference to the repository you are making changes to git reset HEAD README.md # My example # check staging area status git status # commit changes with a message using -m flag git commit -m "example commit" # or include '-a' to commit changed files ("removes --git add .-- step") git commit -a -m "example commit" # add a remote repository git remote add origin https://github.com/USER-NAME/REPO_NAME # specify remote location with -u flag git push -u origin master # future updates use... git push origin master
# which branch are you looking at git branch # Or git status # first line # look at commit history git log # Or, add basic stats to log git log --stat # see the difference of recent changes to last commit git diff # update remote repository git remote update # see which branches are updated git remote -v update # see the commits to master git show-branch master # Or, info on remote repository git remote show origin # returns error if remote repo not available # check if remote repo has changes to pull down locally git fetch origin # or just fetch if using one remote repository git fetch # accept changes from git fetch git merge # or just pull for the above two commands... git pull
# remove a file and update locally rm test.txt # example removal of file git commit -a -m "deleted test.txt as an example" # Or, remove a directory and all its contents git rm -r DIRECTORY # where DIRECTORY is your folder name git commit -m "Remove duplicated directory example" git push origin master # remove directory from remote repository only git rm -r --cached DIRECTORY # then commit and push # remove one file from a folder in the remote repository git rm --cached FOLDER/FILE #then commit and push
# rename existing repository git remote rename origin github # add another repository (e.g. bitbucket) git remote add bitbucket https://[email protected]/rayblick/Virtual-Ecologist.git # if you stuff up and need to remove a repository and its name association git rm bitbucket destination # point git to the new names (HEAD) git push github HEAD git push bitbucket HEAD # For all commands above replace origin with either bitbucket or github.
# create a new branch git branch issue10 # now switch to that branch git checkout issue10 # or # create and switch to a new branch "issue10" git checkout -b issue10 # or switch to existing branch "issue9" git checkout issue9 # switch back to master git checkout master # delete a branch "issue10" git branch -d issue10 # merge a branch git merge issue9 # identify merge conflicts (e.g. independent changes to code in two places) git status # make changes to conflicting files so they are the same, then git add FILENAME1 git add FILENAME2 # or resolve conflicts with GUI git mergetool # post-conflict resolution git merge issue9
# before looking at old commits: stash recent changes # either git commit -a -m "msg" #Or, git stash # to come back to recent changes git stash pop # To investigate a commit by detaching HEAD # you can look out the old commits git checkout <commit> git checkout 0dfg37588 # a snipped commit example # go back to where you were git checkout master # or branch # Or make a new branch from an old commit to make changes git checkout -b old-state <commit> # go back to a previous commit # THIS WILL DELETE ALL LOCAL MODIFICATIONS SO FAR git reset --hard <commit>