Git

From Dave's wiki
Jump to navigation Jump to search

Git is an open source distributed version control system.

Getting started

A useful minimum set of commands for Everyday Git -> https://www.kernel.org/pub/software/scm/git/docs/giteveryday.html

See my post on Git -> http://davetang.org/muse/2013/09/04/getting-started-with-git/

Set up key -> https://help.github.com/articles/generating-ssh-keys

Notes taken from http://try.github.com/levels/1/challenges/1

#to initialize a Git repository
git init
#check current state
git status
#start tracking changes made to octocat.txt
#to add multiple files
#git add one.txt two.txt
git add octocat.txt
#to store our staged changes
git commit -m "Add cute octocat story"
#check log
git log
#push our local repo to the GitHub server
git remote add origin git@github.com:davetang/try_git.git
#if you want to remove origin
git remote rm origin
#specify where to put our commits
git push -u origin master
#check for changes on our GitHub repository
git pull origin master
#look at what is different from our last commit
#diff between last commit and what's been staged
#git diff --staged
git diff HEAD
#unstage files
git reset octofamily/octodog.txt

The default Git branch is master. Branches allow you to work on and switch between different versions of your project.

#to delete a branch
git branch -d clean_up
#create a file called .gitignore in the root
#and add stuff you don't want tracked
seq_data/*.fastq

Common tasks

Guide to branching and merging https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

http://stackoverflow.com/questions/1817766/revert-to-origins-master-branchs-version-of-file

Viewing the commit history http://git-scm.com/book/en/Git-Basics-Viewing-the-Commit-History

Checking a specific commit

git log
git show <revhash>

Git difference between two commits

git log
git diff 2879cb83af7fe43c741f6ff298b22d4f7f267bc8 9d9f2f406564d6ed76b0427d5223c187570c8d29

Unmodifying a Modified File (see http://git-scm.com/book/en/Git-Basics-Undoing-Things)

git checkout -- some_file.txt

Throw out all changes (http://gitready.com/beginner/2009/01/11/reverting-files.html)

git checkout -f
#or
git reset --HARD

Cloning with SSH

#git clone ssh://git@github.com/<user>/<repository name>.git
git clone ssh://git@github.com/davetang/23180801.git

http://stackoverflow.com/questions/61212/how-do-i-remove-local-untracked-files-from-my-current-git-branch

git clean -fd

Hard delete unpublished commits

git reset --hard 0d1d7fc32

rebase

Rebase is one of two Git utilities that specialises in integrating changes from one branch onto another. The other change integration utility is git merge. Rebasing is the process of moving or combining a sequence of commits to a new base commit. From a content perspective, rebasing is changing the base of your branch from one commit to another making it appear as if you'd created your branch from a different commit. Internally, Git accomplishes this by creating new commits and applying them to the specified base. It's very important to understand that even though the branch looks the same, it's composed of entirely new commits.

https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase

Update a fork

https://stackoverflow.com/questions/7244321/how-do-i-update-a-github-forked-repository

git clone https://github.com/davetang/scRNA-seq_notes.git
cd scRNA-seq_notes/

# add remote as upstream
git remote add upstream https://github.com/mdozmorov/scRNA-seq_notes.git

# show remote
git remote
origin
upstream

# fetch all the branches of that remote into remote-tracking branches,
# such as upstream/master:
git fetch upstream

# check which branch you are on
git branch
* master

# switch to master branch if you are not on master
git checkout master

# rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:
git rebase upstream/master

# push to origin remote
git push origin master

Shortcuts

Add all

git add -A

Stage all tracked files

#-a stage all modified files
git commit -a -m 'message'

Settings

Configure name and email

git config --global user.name "Dave Tang"
git config --global user.email "me@davetang.org"

List configurations

git config -l
user.name=Dave Tang
...

Using Git with terminal colours

git config --global color.ui true

Errors

http://stackoverflow.com/questions/7438313/pushing-to-git-returning-error-code-403-fatal-http-request-failed

To use ssh authentication change "https://github.com/" to "git@github.com:", for example:

git clone https://github.com/davetang/repo.git
git clone git@github.com:davetang/repo.git

GitHub

GitHub Standard Fork & Pull Request Workflow -> https://gist.github.com/Chaser324/ce0505fbed06b947d962

GitHub pages

http://pages.github.com/

git clone https://github.com/davetang/davetang.github.io
#or using ssh key
#git clone git@github.com:davetang/davetang.github.io
cd davetang.github.io
echo "Hello World" > index.html
git add --all
git commit -m "Initial commit"
git push

Then visit: http://davetang.github.io

Documentation here -> https://help.github.com/categories/20/articles

Using Jekyll with Pages -> https://help.github.com/articles/using-jekyll-with-pages

Installing Ruby

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz
tar -xzf ruby-2.1.1.tar.gz
cd ruby-2.1.1/
./configure
make
sudo make install

Installing Bundler

sudo gem install bundler

Installing GitHub Pages Ruby Gem

sudo gem install github-pages

Create Gemfile (placed in the root directory of your repository), which contains:

source 'https://rubygems.org'
gem 'github-pages'

Then run:

bundle install