# Fetch, pull & push

Fetch, Pull, Push and Stash are on the Git toolbar and in the **Repository** menu.

| Action | macOS | Linux |
|---|---|---|
| Fetch | `⇧⌘F` | `Ctrl+Shift+F` |
| Pull | `⇧⌘L` | `Ctrl+Shift+L` |
| Push | `⇧⌘P` | `Ctrl+Shift+P` |

## Fetch

**Fetch** updates the current repository. **Repository › Fetch All** fetches every repository of your workspaces.
tratto also fetches on its own, per project, at an interval.

## Pull

Pull follows **your Git configuration** (`pull.rebase`, `pull.ff`): fast-forward only, merge, merge without
fast-forward, rebase, or rebase keeping merges. tratto refuses a configuration it cannot run safely, such as an
interactive rebase, and refuses a rebase pull while you have local changes.

## Push

Push sends the current branch to its upstream. When the branch has no upstream yet, tratto sets one: the remote your
Git config names, else the only remote, else `origin`.

**tratto never force-pushes.** No force flag exists in its Git core, and a configuration that would force a push is
refused.

## Remotes

The **+** in the sidebar adds a remote. A remote's context menu offers **Edit URL…**, **Switch Transport** (SSH or
HTTPS) and **Remove**.

## Authentication

tratto uses what Git already uses on your machine: your **ssh-agent** and your Git **credential helpers**. Git's
terminal prompts are turned off, so a key that needs a passphrase must be loaded in the agent first (`ssh-add`).

**Accounts…** and **Configure SSH Keys…** in the app menu are not built yet.
