Difference between revisions of "Git"
From PHASTA Wiki
(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/ | + | : <code>git clone /path/to/repo</code> |
− | : <code>git clone | + | : <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> | ||
− | + | ; 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) | ||
− | + | ; Push branch to a remote | |
+ | : <code>git push origin branch</code> (pushes from your main <code>origin</code> repo) | ||
− | + | ; 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 themaster
branch to the original/main repo)
- Connect to a remote server
-
git remote add origin <server>
(connects<server>
to your main, ororigin
repository) -
git remote add myrepo <server>
(connects<server>
to a named branch calledmybranch
) - Note:
<server>
could beuser@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 mainorigin
repo)
- Update and merge
-
git pull
(so all branches are up-to-date for the merge) -
git merge origin/master
(merges current branch withorigin
'smaster
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)
- 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
- Edit your
~/.bashrc
to saysource ~/.git-prompt.sh
before the lines that set yourPS1
- Modify your
PS1
string to include$(__git_ps1 "(%s)")
where you want the current branch to appear in your prompt