Intro
Git is a very popular version control system, while GitHub is a service that allows you to upload, host, and manage your code using Git with a nice web interface.
Resources:
Pro Git Book
![]()
Ch. 1.1-1.4: learn the differences between local, centralized, and distributed version control systems.
- Git Cheat Sheets
 - The Odin Project- Introduction to Git
 - Git Tutorial for Beginners: Learn Git in 1 Hour
 - Collaborating with pull requests
 - MRG Training- Version Control
 
Getting Started
Tutorial: Setting Up Git, GitHub, and SSH
Common Git Workflow

Set up an SSH key for GitHub authentication
- See SSH
 
Git Basics
Tagging
Tagging is a functionality in Git used to mark specific commits as significant, often to denote release points (e.g., v1.0, v2.0). https://git-scm.com/book/en/v2/Git-Basics-Tagging
- View all existing tags in the repository.
 
git tag
# Sample output
v1.0
v2.0- Create a lightweight tag to a specific commit.
 
git tag <tag-name>- Tag a previous commit with annotation:
- Create a tag with additional metadata such as tagger name, email, date, and message.
 
 
git tag -a <tag-name> <commit-id>- Show tag information:
 
git show <tag-name>- Share tag with remote repository:
- Push a specific tag to the remote repository.
 
 
git push origin <tag-name>Revert to Previous Commit
Using Git Reset
https://stackoverflow.com/questions/4372435/how-can-i-rollback-a-git-repository-to-a-specific-commit
- Revert back to a previous commit, deleting all changes since that commit (Dangerous in collaboration):
git reset --hard <old-commit-id> git push -f <remote-name> <branch-name> 
Using Git Merge
Reverting to Previous Commit with Git
- Revert the file to the state of the commit prior to the specified 
<commit-id>:- Creates a new commit for the reverted changes and preserves the commit history.
 
git revert <commit-id> 
Git Branching
Checkout a Remote Branch
https://www.freecodecamp.org/news/git-checkout-remote-branch-tutorial/ https://www.educative.io/answers/how-to-checkout-a-remote-branch-in-git

- Fetch All Remote Branches
 
git fetch origin- List Branches Available for Checkout
 
git branch -a- Make a Local Copy of a Remote Branch
 
git checkout -b <name-your-branch> origin/<name-of-remote-branch>Git Tools
Submodules
- References
 
Submodules allow you to keep a Git repository as a subdirectory of another Git repository. Submodules are simply a reference to a specific commit in another repository
Add a submodule
- Add submodule
- By default, submodules will add the subproject into a directory named the same as the repository
 - You can add a different path at the end of the command if you want it to go elsewhere
 
 
git submodule add <repo URL> - init the submodule and clone the code to it
 
git submodule update --init --recursive- Commit the changes
- On GitHub, the submodule folder will have a little indicator showing that it is a submodule
 
 
Update a submodule
Here’s a typical workflow to update a submodule:
- 
Navigate to the Submodule Directory:
cd path/to/submodule - 
Pull the Latest Changes:
git pull origin main - 
Return to the Main Repository:
cd ../.. - 
Stage the Updated Submodule Reference:
git add path/to/submodule - 
Commit the Update:
git commit -m "Update submodule to latest commit" 
Cloning a Project with Submodules
- When you clone a repository that contains submodules, the submodules are not automatically cloned or initialized.
- You need to initialize your local configuration file, and run 
git submodule updateto fetch all the data from that project and check out the appropriate commit listed in your superproject 
 - You need to initialize your local configuration file, and run 
 
git clone <repository-url>
cd <repository-directory>
git submodule update --init --recursive



