Git
Expert assistance with Git version control and collaborative workflows.
Essential Commands
Repository Setup
git init - Initialize new repository
git clone <url> - Clone remote repository
git remote add origin <url> - Add remote
git remote -v - List remotes
Daily Workflow
git status - Check working tree status
git add . - Stage all changes
git add -p - Interactive staging
git commit -m "message" - Commit with message
git commit --amend - Amend last commit
git pull - Fetch and merge from remote
git push - Push commits to remote
Branch Management
git branch - List local branches
git branch -a - List all branches (including remote)
git branch <name> - Create new branch
git checkout <branch> - Switch to branch
git checkout -b <name> - Create and switch to new branch
git branch -d <name> - Delete branch (safe)
git branch -D <name> - Force delete branch
git push origin --delete <branch> - Delete remote branch
Viewing History
git log - View commit history
git log --oneline --graph - Compact graphical history
git log --author="name" - Filter by author
git show <commit> - Show commit details
git diff - Show unstaged changes
git diff --staged - Show staged changes
git diff <branch1>..<branch2> - Compare branches
Undoing Changes
git restore <file> - Discard working changes
git restore --staged <file> - Unstage file
git reset HEAD~1 - Undo last commit (keep changes)
git reset --hard HEAD~1 - Undo last commit (discard changes)
git revert <commit> - Create new commit that undoes changes
git clean -fd - Remove untracked files
Stashing
git stash - Stash current changes
git stash list - List stashes
git stash pop - Apply and remove last stash
git stash apply - Apply last stash (keep in list)
git stash drop - Delete last stash
Advanced Operations
Rebasing
bash
1# Rebase current branch onto main
2git rebase main
3
4# Interactive rebase (squash, reorder, edit commits)
5git rebase -i HEAD~3
6
7# Continue after resolving conflicts
8git rebase --continue
9
10# Abort rebase
11git rebase --abort
Cherry-picking
bash
1# Apply specific commit to current branch
2git cherry-pick <commit-hash>
3
4# Cherry-pick without committing
5git cherry-pick -n <commit-hash>
Merging
bash
1# Merge branch into current
2git merge <branch>
3
4# Merge without fast-forward (create merge commit)
5git merge --no-ff <branch>
6
7# Abort merge
8git merge --abort
Conflict Resolution
bash
1# Show conflicts
2git status
3
4# After resolving conflicts in files
5git add <resolved-file>
6git commit
7
8# Use theirs/ours for entire file
9git checkout --theirs <file>
10git checkout --ours <file>
Git Workflows
Feature Branch Workflow
bash
1# Create feature branch
2git checkout -b feature/new-feature
3
4# Work and commit
5git add .
6git commit -m "Add new feature"
7
8# Update from main
9git checkout main
10git pull
11git checkout feature/new-feature
12git rebase main
13
14# Push feature branch
15git push -u origin feature/new-feature
Hotfix Workflow
bash
1# Create hotfix from main
2git checkout main
3git pull
4git checkout -b hotfix/critical-fix
5
6# Fix and commit
7git commit -am "Fix critical bug"
8
9# Merge back to main
10git checkout main
11git merge hotfix/critical-fix
12git push
13
14# Clean up
15git branch -d hotfix/critical-fix
Configuration
User Setup
bash
1git config --global user.name "Your Name"
2git config --global user.email "your@email.com"
Useful Aliases
bash
1git config --global alias.co checkout
2git config --global alias.br branch
3git config --global alias.ci commit
4git config --global alias.st status
5git config --global alias.lg "log --oneline --graph --all"
Editor
bash
1git config --global core.editor "vim"
Best Practices
- Commit Messages: Use clear, descriptive messages following conventional commits
- Small Commits: Make atomic commits that do one thing
- Pull Before Push: Always pull latest changes before pushing
- Branch Naming: Use descriptive names like
feature/, bugfix/, hotfix/
- Never Force Push: Avoid
git push --force on shared branches
- Review Changes: Use
git diff before committing
- Protect Main: Never commit directly to main/master
Troubleshooting
Undo accidental commit to wrong branch
bash
1git reset HEAD~1 # Undo commit, keep changes
2git stash # Stash changes
3git checkout <correct-branch>
4git stash pop # Apply changes
5git add .
6git commit -m "message"
Fix merge conflicts
bash
1# View conflicts
2git status
3
4# Edit conflicting files (look for <<<<<<, ======, >>>>>>)
5# Remove conflict markers and keep desired code
6
7# Mark as resolved
8git add <file>
9git commit
Recover deleted branch
bash
1# Find commit hash
2git reflog
3
4# Recreate branch
5git checkout -b <branch-name> <commit-hash>