Version Control with Git
What is version control?
- A tool to track the history of a project
- who changed what when
- Individual or collaborative
Why do I can about the history of a project?
- Individual:
- fix (or undo) mistakes
- what was done and why
- definitive (final?) version
- hard to accidentally delete
- Collaborative:
- who to ask if you have questions
- work simultaneously
- hard to overwrite
Configuration
- git command format: git verb
- verb: config
- who you are
- --global
- apply everywhere
- color: color code output
- editor: set default editor
- you can change these setting at any time
git config --global user.name "Your Name"
git config --global user.email "YourEmail@email.edu"
git config --global color.ui "auto"
git config --global core.editor "nano"
Creating a repository
- cd to your home directory
- make a directory called toy_repo
- cd into toy_repo directory
git init
- make toy_repo directory a repository
ls -a
- .git directory is where git stores the history of the project
git status
Tracking Changes to Files
- Create a file to track
- Open your text editor
- Type: # My Toy Git Repo
- save file as README.md
- Check in with git
- start tracking file
- Record current state
-
- -m : commit message inline
git status
git add README.md
git commit -m "starting project with readme"
What are we doing?
Exercise 1:
- make a directory called code
- cd into that directory
- create a file called hello_world.py that prints "hello world" when you run it
- start tracking and record the current state of hello_world.py
- cd back to your toy_repo directory
- Click your "yes" button when you are done
git status
git add filename
git commit -m "commit message"
Viewing your history
git log
Changing a File
- Open your README.md file and add:
- This code prints hello world to the screen
- Check the status of your files
- View the changes you made
- Tell git which files you want to record changes in
- Save changes to revision history
git status
git diff README.md
git add README.md
git commit -m "adding description of code to readme"
What are we doing?
Exercise 2
- Open file README.md in your text editor
- Add a line that says your are the author
- View the change you made using git
- Record your changes in the project's history
- View your project's history
- Click your "yes" button when you are finished
- Bonus:
- make another change
- try any one of these variations:
- commit without adding
- view changes between adding and committing
- commit without the -m
A note on viewing changes
-
- changes between working directory and what was last staged
-
- changes between staging area and last commit
git diff
git diff --staged
Referencing different versions
- Shorthand for different versions of a repository (refers to commits)
- Current Version (most recent commit): HEAD
- Version before current: HEAD~1
- Version before that: HEAD~2
- Each of these also has a commit hash
- use git log to get appropriate hash
Exploring History
- Changes made in the last commit
- Changes made in the last 2 commits
- Changes made in the last 3 commits
- Changes made since commit hash...
- first 7 characters
- use git log to find commit you want
git diff HEAD~1
git diff HEAD~2
git diff HEAD~3
git diff 0b0d55e
Recovering Older Versions
- Overwrite README.md:
- Recover last recorded version:
- checkout HEAD = revert to version in HEAD
- can use commit hash to revert to even older version
- mars.txt: tells git which file to revert
- in git status they list this option with -- instead of HEAD. This is a shortcut.
echo 'this project is stupid' > README.md
cat README.md
git checkout HEAD README.md
What is going on here:
Exercise 3:
- Overwrite and recover hello_world.py
- Click your 'yes' button when you are finished
- Bonus:
- revert to the first saved version of README.md
- switch back to the most recent version of README.md
local_version_control_w_readme
By abostroem
local_version_control_w_readme
- 1,408