Learning Objectives
- Learn how to clone remote repositories
- Understand the difference between fetch and pull
- Master pushing changes to remote repositories
- Discover best practices for remote operations
Cloning Repositories
Cloning creates a copy of a remote repository on your local machine, including all its branches and history. It's typically your first step when working with an existing project.
Basic Clone Operations
# Clone a repository$ git clone https://github.com/username/repository.git # Clone to a specific folder$ git clone https://github.com/username/repository.git my-folder # Clone a specific branch$ git clone -b branch-name https://github.com/username/repository.git # Clone with depth limit (shallow clone)$ git clone --depth=1 https://github.com/username/repository.git
Important Note
When you clone a repository, Git automatically sets up the remote as 'origin' and creates a local branch for each remote branch, typically starting with 'main' or 'master'.
Fetching Changes
Fetching downloads new changes from the remote repository but doesn't integrate them into your working files. This is a safe way to review changes before merging.
Fetch Operations
# Fetch all branches from origin$ git fetch origin # Fetch a specific branch$ git fetch origin branch-name # Fetch from all remotes$ git fetch --all # Fetch and prune deleted remote branches$ git fetch --prune
After Fetching
# View all branches (including remote)$ git branch -a # Compare local and remote branches$ git log HEAD..origin/main # Merge fetched changes if desired$ git merge origin/main
Pulling Changes
Pulling fetches changes from a remote repository AND merges them into your current branch. It's essentially a combination of fetch and merge.
Pull Commands
# Pull changes from current branch's upstream$ git pull # Pull from specific remote and branch$ git pull origin main # Pull using rebase instead of merge$ git pull --rebase origin main # Pull while allowing unrelated histories$ git pull origin main --allow-unrelated-histories
Pull vs Fetch
git fetch
- • Downloads changes only
- • Doesn't modify working branch
- • Safer option for review
git pull
- • Downloads and merges changes
- • Updates working branch
- • Faster for integration
Pushing Changes
Pushing uploads your local changes to a remote repository, making them available to others. It's how you share your work with the team.
Push Operations
# Push current branch to its upstream$ git push # Push to specific remote and branch$ git push origin main # Push all branches$ git push --all origin # Force push (use with caution!)$ git push --force origin main # Push and set upstream$ git push -u origin feature-branch
Warning: Force Push
Using --force
can overwrite remote history. Only use it when absolutely necessary and you understand the consequences. Consider using --force-with-lease
instead.
Common Scenarios
Here are some common scenarios you'll encounter when working with remotes:
Starting New Feature
# Update main branch$ git checkout main$ git pull origin main # Create and push feature branch$ git checkout -b feature-branch$ git push -u origin feature-branch # Work and push changes$ git add .$ git commit -m "Add new feature"$ git push
Updating Fork
# Add upstream remote$ git remote add upstream https://github.com/original/repository.git # Fetch upstream changes$ git fetch upstream # Merge upstream changes$ git checkout main$ git merge upstream/main
Remote Operations Best Practices
- Working with pull requests
- Code review workflows and best practices