Difference between revisions of "Git"

From PHASTA Wiki
Jump to: navigation, search
(Created page with "== Introduction == Git is a distributed revision control system (VCS), designed to work well with highly non-linear workflows. It was initially conceived to support development ...")
 
Line 9: Line 9:
 
Basic information to get started with Git can be found at http://rogerdudler.github.io/git-guide/.
 
Basic information to get started with Git can be found at http://rogerdudler.github.io/git-guide/.
  
; Git repository
+
; Git repository (repo)
 
: Is a directory that contains files of the current branch and a hidden <code>.git</code> directory
 
: Is a directory that contains files of the current branch and a hidden <code>.git</code> directory
 
: Contains an '''Index''' in <code>.git</code> that acts as a staging area for all your branches
 
: Contains an '''Index''' in <code>.git</code> that acts as a staging area for all your branches
Line 19: Line 19:
  
 
; Checkout a repository
 
; Checkout a repository
: <code>git clone /path/to/repository</code>
+
: <code>git clone /path/to/repo</code>
: <code>git clone username@remote-host:/path/to/repository</code>
+
: <code>git clone user@host:/path/to/repo</code>
  
 
; Add files to be tracked in the git index
 
; Add files to be tracked in the git index
Line 33: Line 33:
 
: <code>git push origin master</code> (pushes the <code>master</code> branch to the original/main repo)
 
: <code>git push origin master</code> (pushes the <code>master</code> branch to the original/main repo)
  
;  
+
; Connect to a remote server
: <code></code>
+
: <code>git remote add origin <server></code> (connects <code><server></code> to your main, or <code>origin</code> repository)
 +
: <code>git remote add myrepo <server></code> (connects <code><server></code> to a named branch called <code>mybranch</code>)
 +
: Note: <code><server></code> could be <code>user@host:/path/to/repo</code>
  
== Deeper Shit (more advanced material) ==
+
; Create and delete branch
 +
: <code>git checkout -b branch_name</code> (creates and checkout branch)
 +
: <code>git checkout master</code> (checkout master branch)
 +
: <code>git branch -d branch_name</code> (delete branch we just created)
  
== Setting Up PHASTA ==
+
; Push branch to a remote
 +
: <code>git push origin branch</code> (pushes from your main <code>origin</code> repo)
  
== Modifying PHASTA ==
+
; Update and merge
 +
: <code>git pull</code> (so all branches are up-to-date for the merge)
 +
: <code>git merge origin/master</code> (merges current branch with <code>origin</code>'s <code>master</code> branch)
 +
: If a merge has conflicts, you need to edit the conflict files provided by Git, and then mark them as merged with <code>git add</code>
  
==
+
; Compare code in different branches
 +
: <code>git diff <branch_a> <branch_b></code>
 +
 
 +
; View history of commits
 +
: <code>git log</code>
 +
: <code>git log --author=foo</code>
 +
: <code>git log --pretty=oneline</code> (show each commit as one line)
 +
: <code>git log --graph --oneline --decorate --all</code> (ASCII tree of branches, commits, merges)
 +
: <code>git log --name-status</code> (show which files changed in each commit)
 +
: <code>git log --help</code> (more information)
 +
 
 +
== Advanced Git ==
 +
 
 +
== Git Prompt Statement (PS1) ==
 +
 
 +
# Acquire <code>git-prompt.sh</code> from https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh, and save it somewhere like <code>~/.git-prompt.sh</code>
 +
# Edit your <code>~/.bashrc</code> to say <code>source ~/.git-prompt.sh</code> before the lines that set your <code>PS1</code>
 +
# Modify your <code>PS1</code> string to include <code>$(__git_ps1 "(%s)")</code> where you want the current branch to appear in your prompt

Revision as of 11:58, 5 June 2015

Introduction

Git is a distributed revision control system (VCS), designed to work well with highly non-linear workflows. It was initially conceived to support development of the Linux kernel, and has since become the most widely-used VCS for software development.

This page is essentially a cheat-sheet for git commands frequently used by our group.

Basic Git

Basic information to get started with Git can be found at http://rogerdudler.github.io/git-guide/.

Git repository (repo)
Is a directory that contains files of the current branch and a hidden .git directory
Contains an Index in .git that acts as a staging area for all your branches
Contains a HEAD in .git that points to the last commit you made
Your PHASTA repository should always be at ~/git-phasta/phasta
Create a new repository
git init
Checkout a repository
git clone /path/to/repo
git clone user@host:/path/to/repo
Add files to be tracked in the git index
git add <filename1> <filename2> ...
git add *
git add -u (all files updated since last commit)
Commit changes to HEAD
git commit -m "my_username: my comments about this commit"
Push changes to remote repo
git push origin master (pushes the master branch to the original/main repo)
Connect to a remote server
git remote add origin <server> (connects <server> to your main, or origin repository)
git remote add myrepo <server> (connects <server> to a named branch called mybranch)
Note: <server> could be user@host:/path/to/repo
Create and delete branch
git checkout -b branch_name (creates and checkout branch)
git checkout master (checkout master branch)
git branch -d branch_name (delete branch we just created)
Push branch to a remote
git push origin branch (pushes from your main origin repo)
Update and merge
git pull (so all branches are up-to-date for the merge)
git merge origin/master (merges current branch with origin's master branch)
If a merge has conflicts, you need to edit the conflict files provided by Git, and then mark them as merged with git add
Compare code in different branches
git diff <branch_a> <branch_b>
View history of commits
git log
git log --author=foo
git log --pretty=oneline (show each commit as one line)
git log --graph --oneline --decorate --all (ASCII tree of branches, commits, merges)
git log --name-status (show which files changed in each commit)
git log --help (more information)

Advanced Git

Git Prompt Statement (PS1)

  1. Acquire git-prompt.sh from https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh, and save it somewhere like ~/.git-prompt.sh
  2. Edit your ~/.bashrc to say source ~/.git-prompt.sh before the lines that set your PS1
  3. Modify your PS1 string to include $(__git_ps1 "(%s)") where you want the current branch to appear in your prompt