2. Who is this for?
● Folks starting to use Git or foraying just now
● Folks who are using SmartGit :)
● Using Git as CVCS
http://rogerdudler.github.io/git-guide/
9. Create a new Repository
$ cd project/
$ git init # initializes the repository
$ git add . # add those 'unknown' files - ADDS FOR STAGE
$ git commit # commit all changes, edit changelog entry
- M
$ git rm --cached <file>... # ridiculously complicated
command to undo, in case you forgot .gitignore
$ git reset HEAD <file> # same as before
$ git init project002 #shortcut for mkdir project002 &&
cd project002 && git init
10. Git Clone
$ git clone git://github.com/sengopal/simplegit.git
Initialized empty Git repository in
/private/tmp/simplegit/.git/
remote: Counting objects: 100, done.
remote: Compressing objects: 100% (86/86), done.
remote: Total 100 (delta 35), reused 0 (delta 0)
Receiving objects: 100% (100/100), 9.51 KiB, done.
Resolving deltas: 100% (35/35), done.
$ cd simplegit/
$ ls
copy the entire history of that project so you have it locally
11. Git status
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README
# new file: hello.py
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in
working directory)
#
# modified: README
#
12. Git add
Start tracking new files and also to stage changes to already tracked files
$ touch README.md; echo “test” > README.md
$ git status
$ git add .
$ git status
$ git diff
Shortcut: git commit -a # the -a flag pulls in all modified files
will commit all changed files (but not new files, those need to be added to the
index with git-add). If you want to commit only certain files then you will need to
stage them first with git-add
13. Git diff
To compare two revisions of a file, or your current file and a previous revision
$ git diff README.md
$ git diff --staged README.md
$ git diff HEAD README.md
$ git diff --stat README.md
To compare 2 revisions of a file:
$ git diff <commit1> <commit2> <file_name>
14. .gitignore
$ git add .gitignore
will use its rules when looking at files to commit to ignore from staging
$ git rm --cached filename
will not ignore a file that was already tracked before a rule was added to this file
# to remove the tracked file - Caution: This deletes the file
$ git config --global core.excludesfile ~/.
gitignore_global
file can be committed into the repository, thus sharing the rule list with any
other users that clone the repository.
15. Git Commit
$ git commit -m 'my awesome changes'
-m option not given - open a text editor for you to write your commit message.
$ git commit -a
automatically stage all tracked, modified files before the commit
16. Git push
remote branches
are identical to local branches except that Git will not allow you to check them
out. However, you can merge from them, diff them to other branches, run
history logs on them, etc. You do all of that stuff locally after you synchronize.
$ git push <remote> <branch>
# push new commits to the <branch> on the <remote> repository
For someone coming from CVS, the commit to the central
repository now requires two steps.
$ git clone
# creates a remote called origin for push and fetch
17. Git pull and fetch
$ git pull <remote> <branch>
# fetches code and merges it
$ git fetch <remote> <branch>
# fetches code without merging
$ git pull --tag <remote> <branch>
# pulls tags as well
18. Git reset
just a plain old git reset should unstage accidental git add
$ git reset --soft
undo the last commit and put the files back onto the stage
$ git reset --hard
undo the last commit, unstage files AND undo any changes in the working dir
$ git-reset --hard <hash>
Revert to a previous commit by hash
$ git-reset --hard HEAD^
your last commit before pull/merge
19. Git reset
$ git reset HEAD <file>
unstage file and copy from latest commit
$ git reset -- <file>
unstages specific files and copy files from the stage
$ git checkout HEAD -- files
copies files from the latest commit to both the stage and the working directory.
$ git checkout -- files
copies files from the stage to the working directory. Use this to throw away local
changes.
20. git branch
The default branch in a git repository is called master.
$ git branch <branch-name>
To create a new branch use
$ git branch
To see a list of all branches in the current repository type
$ git checkout <branch-name>
If you want to switch to another branch you can use
$ git checkout -b <branch-name>
To create a new branch and switch to it in one step
$ git branch -d <branch-name> # To delete a branch
$ git stash branch <branch-name> # To create a branch with current
changes
21. git rebase
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command
$ git rebase -i
$ git rebase --interactive
22. git merge
If you want to merge a branch (e.g. master to release), make sure your current
branch is the target branch you'd like to merge into (use git branch or git status to
see your current branch).
$ git merge experiment
where experiment is the name of the branch you want to merge with the current
branch
$ git diff
to see pending conflicts you have to resolve.
$ git checkout -b linux-work # create a new branch
$ <make changes>
$ git commit -a
$ git checkout master # go back to master branch
$ git merge linux-work # merge changesets from linux-work
23. git merge
$ git checkout master
$ git rebase topic
First, rewinding head to replay your work on top of it...
Fast-forwarded master to topic.
This command lays the latest changes to topic right on top of the master
branch, and preserves all of your commit history- laying them right on the end
of the master branch’s commit history.
$ git merge --squash topic
This command will result in a commit log like a normal merge- meaning that all
of the individual commit messages from the topic branch will become one
single “merge” message.
27. git remote
$ git remote add origin user@server:/path/to/project.git
adding a remote branch
$ git remote -v
origin git@github.com:github/git-reference.git (fetch)
origin git@github.com:github/git-reference.git (push)
list the remotes available
$ git remote rm origin
removing an existing remote alias
28. Quick tips
$ git log -- filename
see the history of revisions to a file
$ gitk
inspect history visually, shows you how the revisions are connected
$ git log
this pipes a log of the current branch into your PAGER
$ git log -p
# same as above, but append a patch after each commit message
$ git show HEAD
show commit info, diffstat and patch of the tip of current branch
29. Quick tips
$ git filter-branch --tree-filter 'rm -f filename' HEAD
remove all instances of a file from every commit
$ git filter-branch --env-filter
"export GIT_AUTHOR_EMAIL=you@email.com" HEAD
change your email in all commits
$ git blame <file-name>
history of user changes in a file
$ git log --pretty=oneline --graph
pretty log with a graph of changes done