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
.gitdirectory - Contains an Index in
.gitthat acts as a staging area for all your branches - Contains a HEAD in
.gitthat 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 themasterbranch to the original/main repo)
- Connect to a remote server
-
git remote add origin <server>(connects<server>to your main, ororiginrepository) -
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 mainoriginrepo)
- Update and merge
-
git pull(so all branches are up-to-date for the merge) -
git merge origin/master(merges current branch withorigin'smasterbranch) - 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.shfrom https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh, and save it somewhere like~/.git-prompt.sh - Edit your
~/.bashrcto saysource ~/.git-prompt.shbefore the lines that set yourPS1 - Modify your
PS1string to include$(__git_ps1 "(%s)")where you want the current branch to appear in your prompt