HTTP/1.1 -1 Read error in cache disk data: SuccessContent-Type: text/plain; charset="utf-8" Last-Modified: Sat, 22 Jan 2022 01:00:25 GMT Content-length: 4741 Connection: Close Proxy-Connection: Close X-Cache: HIT from web1.osuosl.org Server: ProxyTrack 0.5 (HTTrack 3.49.2) = preface = Before you do anything, you should probably install the bash completion script for git, it makes the learning curve a lot less steep: http://repo.or.cz/w/git.git?a=blob;f=contrib/completion/git-completion.bash It will make your prompt be something really cool like: {{{ ~/git-svn/parrot parrotobj $ }}} where '''parrotobj''' is the name of the branch. There are many other useful setting if you read the comments in git-completion.bash . You also probably want to setup at least your name and email in your '''~/.gitconfig'''. Here is an example file: http://github.com/leto/Util/blob/master/config/.gitconfig = checkout = To check out a repo: {{{ git clone git://github.com/leto/parrot.git }}} There should now be a directory called "parrot" in your current directory. = commit = Next we modify a file so we can commit a change: {{{ echo "Some junk" >> README }}} To see a list of modifies files: {{{ git status }}} should produce something like {{{ # On branch master # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: README # }}} To commit all local changes: {{{ git commit -a -m "I did some stuff" }}} If you had multiple changed files that you wanted to commit seperately, you would do {{{ git add README git commit -m "I commit stuff" }}} LESSON: Git only commits files you have added already. The -a flag lets you be lazy and say "go ahead and add all modified files" when you are commiting. = log = {{{ git log -10 }}} to see the commit message and metadata for the last 10 commits. {{{ git log -p }}} to see the commit history as a series of patches . For a colored ascii-art visualization of your git history, with author, time and branch name : {{{ git log --pretty=format:'%C(yellow)%h%Creset %s %Cred%an%Creset %Cblue%d%Creset %Cgreen%cr%Creset %cd' --graph --all }}} (requires git 1.6.x ) You can give '''git log''' a file name or directory or a branch name. Very useful! = update = The equivalent of "svn up" is {{{ git pull }}} = list branches = To see a list of current local branches: {{{ git branch }}} To see all local and remote branches: {{{ git branch -a }}} = create a branch = Suppose you want to create a local branch to work on your latest and greatest new feature. To create a new branch and check it out all in one automagical command: {{{ git checkout -b new_branch }}} If you want to create the branch and check it out seperately (maybe because you want to do something else in between or batch the creation of many branches/etc..) {{{ git branch some_branch }}} Later on, you can checkout '''some_branch''' with: {{{ git checkout some_branch }}} = switching branches = Let's say you are on '''new_branch''' but you want to go back to the master branch: {{{ git checkout master }}} = merge = To merge the '''foobar''' branch into the current branch: {{{ git merge foobar }}} = praise/blame = Git has everyone's favorite VCS command, blame! {{{ git blame somefile }}} = revert = The equivalent of '''svn revert''' is roughly '''git checkout'''. Let's say we totally borked a file, '''README''' and we want to revert that file: {{{ git checkout README }}} If you want to blow away all local changes, the equivalent of '''svn revert -R .''' is {{{ git checkout . }}} = Getting Help = Need more help? To get the man page for the git command '''foo''' type {{{ git help foo }}} If you just want a short rundown of commandline options and such, try {{{ git foo -h }}} = OH NOES, git lost my work, I hate git, give me svn back = If you think you lost your committed work, you are probably wrong. Try {{{ git reflog }}} This command is your best friend. It records the tip of '''every''' commit, even if it is not part of any branch. Did you accidentally delete that '''really important''' branch ? Did you rebase away that '''really''' cool feature? Find the sha1 one that you want to go to and then type {{{ git reset --hard sha1 }}} If you want to keep track of that important sha1, you probably want to create a branch at that point: {{{ git checkout -b this_branch_is_awesome }}} = how do I get that thing over there on that onto this branch here? = Find the sha1, a single commit that you would like to "borrow" from another branch, or perhaps something you found in the '''reflog''', then type: {{{ git cherry-pick sha1 }}} If you have multiple commits to pull over, then you must do multiple cherry-pick's. ="milestone_mode">