Git Fetch
## Git Fetch Command
The `git fetch` command is used to download objects, references, and history from a remote repository into your local repository.
Unlike `git pull`, which downloads and immediately attempts to merge remote changes into your current working branch, `git fetch` only downloads the data. It allows you to inspect the changes before merging them into your local branches, making it a safer way to view what others have been working on.
---
### Understanding Git Fetch vs. Git Pull
To understand `git fetch`, it is helpful to look at how it relates to `git merge` and `git pull`:
* **`git fetch`**: Downloads new data from a remote repository but does **not** modify your local working directory or current branches. It updates your remote-tracking branches (e.g., `origin/master`).
* **`git merge`**: Combines changes from one branch (such as a remote-tracking branch) into your current active branch.
* **`git pull`**: A high-level command that runs `git fetch` and immediately follows it with `git merge` to integrate the remote changes into your current local branch.
---
### Syntax and Usage
To fetch updates from a configured remote repository, use the following syntax:
```bash
git fetch
```
* ``: The alias of your remote repository (commonly `origin`).
If you run `git fetch` without specifying a remote, Git will fetch from the default remote repository (usually `origin`) associated with your current branch.
After fetching the remote changes, you can merge them into your current local branch using:
```bash
git merge /
```
---
### Step-by-Step Example
In this example, we will use a remote GitHub repository named `origin` with a branch named `master`.
#### 1. Scenario: Remote Changes Exist
Suppose a collaborator has pushed changes to the remote repository, or you have edited a file (such as `README.md`) directly on GitHub. Your local repository is now behind the remote repository.
#### 2. Fetching the Remote Changes
To retrieve the latest changes from the remote repository without affecting your local working files, run:
```bash
$ git fetch origin
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:username/project-repo
0205aab..febd8ed master -> origin/master
```
**Understanding the Output:**
The line `0205aab..febd8ed master -> origin/master` indicates that the remote `master` branch has updates (from commit `0205aab` to `febd8ed`). These changes have been downloaded and stored locally in the remote-tracking branch `origin/master`.
#### 3. Comparing Changes (Optional but Recommended)
Before merging, you can inspect the differences between your local branch and the fetched remote branch:
```bash
git log HEAD..origin/master
```
Or view the exact file differences:
```bash
git diff HEAD origin/master
```
#### 4. Merging the Changes
Once you have reviewed the changes and are ready to apply them to your local `master` branch, run the `git merge` command:
```bash
$ git merge origin/master
Updating 0205aab..febd8ed
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
```
#### 5. Verifying the Update
You can now verify that the local files have been updated successfully. For example, view the contents of the updated `README.md` file:
```bash
$ cat README.md
# Project Title
## First modification content added remotely
```
---
### Key Considerations
* **Safety First**: `git fetch` is a "safe" command because it does not alter your local development state. It is highly recommended to run `git fetch` first, inspect the changes, and then manually merge them.
* **Clean Working Directory**: While you can fetch at any time, it is best practice to have a clean working directory (no uncommitted changes) before running `git merge` to avoid merge conflicts.
* **Pruning Obsolete Branches**: Over time, branches may be deleted on the remote repository. You can clean up your local references to these deleted remote branches during a fetch by running:
```bash
git fetch --prune
```
YouTip