Git Version Control
Git is a distributed version control system that tracks changes in source code during software development. It allows multiple developers to work together on non-linear development histories.
1. Key Concepts
- Repository (Repo): The folder containing your project and the
.gitfolder (which holds the version history). - Commit: A snapshot of your project at a specific point in time.
- Branch: A parallel version of the repository. It allows you to work on features independently of the main codebase.
- Merge: Combining changes from one branch into another.
- Remote: A version of your repository hosted on the internet (e.g., GitHub, GitLab).
2. Basic Workflow
- Modify files in your working directory.
- Stage the files, adding snapshots of them to your staging area.
- Commit the staged files, which takes the files as they are in the staging area and stores that snapshot permanently to your Git directory.
3. Essential Commands
Setup & Initialization
git init: Initialize a new Git repository locally.git clone <url>: Copy a remote repository to your local machine.git config --global user.name "Your Name": Configure your identity.
Staging & Committing
git status: Check the status of your files (modified, staged, untracked).git add <file>: Add a file to the staging area.git add .: Add all changed files.
git commit -m "Message": Commit the staged changes with a descriptive message.
Syncing
git push: Upload local commits to the remote repository.git pull: Fetch and merge changes from the remote repository to your local machine.
4. Branching
Branching is Git's "killer feature". It allows you to diverge from the main line of development and continue to do work without messing with that main line.
git branch: List all local branches.git branch <name>: Create a new branch.git checkout <name>(orgit switch <name>): Switch to a specific branch.git merge <branch>: Merge the specified branch into the current branch.
5. .gitignore
A file named .gitignore specifies intentionally untracked files that Git should ignore (e.g., node_modules, .env, build artifacts).
6. Trunk Based Development
Trunk Based Development is a version control management practice where developers merge small, frequent updates to a core "trunk" or main branch.
- Core Idea: Avoid long-lived feature branches.
- Workflow: Developers work on short-lived branches (a few hours to a day) and merge back to
mainfrequently. - Benefits: Reduces merge conflicts, enables Continuous Integration (CI), and faster feedback loops.
- Feature Flags: Often used to hide unfinished features in production while still merging the code.
programming/linux-command-line-basics programming/ci-cd-pipelines