# Commits an ein Remote-Repository pushen

Mit git push kannst du Commits von deinem lokalen Branch in ein Remote-Repository pushen.

## Informationen zum `git push`

Der Befehl `git push` akzeptiert zwei Argumente:

* Einen Remote-Name (beispielsweise `origin`)
* Einen Branchnamen (z. B. `main`)

Beispiel:

```shell
git push REMOTE-NAME BRANCH-NAME
```

Als Beispiel führst du in der Regel `git push origin main` aus, um deine lokalen Änderungen an dein Onlinerepository zu pushen.

## Branches umbenennen

Um einen Branch umzubenennen, verwendest du den gleichen Befehl `git push`, fügst aber in diesem Fall ein weiteres Argument hinzu: den Namen des neuen Branches. Beispiel:

```shell
git push REMOTE-NAME LOCAL-BRANCH-NAME:REMOTE-BRANCH-NAME
```

Dadurch wird der `LOCAL-BRANCH-NAME` an deinen `REMOTE-NAME` gepusht, aber in `REMOTE-BRANCH-NAME` umbenannt.

## „Non-Fast-Forward“-Fehler handhaben

Wenn deine lokale Kopie eines Repositorys mit dem Upstream-Repository, zu dem du pushst, nicht synchronisiert ist oder hinterherhinkt, erhältst du die Meldung `non-fast-forward updates were rejected`.
Das bedeutet, dass du die Änderungen im Upstream-Repository abrufen (fetchen) musst, bevor du deine lokalen Änderungen "pushen" kannst.

Weitere Informationen zu diesem Fehler findest du unter [Non-Fast-Forward-Fehler handhaben](/de/enterprise-server@3.22/get-started/using-git/dealing-with-non-fast-forward-errors).

## Tags verschieben

Standardmäßig und ohne zusätzliche Parameter sendet `git push` alle übereinstimmenden Zweige, die denselben Namen wie entfernte Zweige haben.

Um ein einzelnes Tag zu übertragen, kannst du den gleichen Befehl wie beim Push eines Branches ausführen:

```shell
git push REMOTE-NAME TAG-NAME
```

Zum Pushen aller deiner Tags kannst du folgenden Befehl eingeben:

```shell
git push REMOTE-NAME --tags
```

## Einen Remote-Branch oder ein Tag löschen

Die Syntax zum Löschen eines Branches ist auf den ersten Blick etwas geheimnisvoll:

```shell
git push REMOTE-NAME :BRANCH-NAME
```

Beachte, dass vor dem Doppelpunkt ein Leerzeichen steht. Der Befehl ähnelt den Schritten, die du beim Umbenennen eines Branches ausführst. Hier weist du Git jedoch an, *nichts* in `BRANCH-NAME` auf `REMOTE-NAME` zu pushen. Aus diesem Grund löscht `git push` den Branch im Remote-Repository.

## Remotes und Forks

Möglicherweise wissen Sie bereits, dass [Sie Repositorys auf GitHub "forken" können](https://guides.github.com/overviews/forking/).

Wenn du ein eigenes Repository klonst, gibst du dafür eine Remote-URL an, die Git mitteilt, wo Updates gefetcht und gepusht werden sollen. Wenn du mit dem ursprünglichen Repository zusammenarbeiten möchtest, fügst du deinem lokalen Git-Klon eine neue Remote-URL hinzu, die normalerweise mit `upstream` bezeichnet wird:

```shell
git remote add upstream THEIR_REMOTE_URL
```

Nun kannst du Updates und Branches aus *ihrem* Fork fetchen:

```shell
git fetch upstream
# Grab the upstream remote's branches
> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From https://HOSTNAME/OCTOCAT/REPO
>  * [new branch]      main     -> upstream/main
```

Wenn Sie mit lokalen Änderungen fertig sind, können Sie Ihren lokalen Zweig an GitHub übertragen und [itiieren sie eine Pullanforderung](/de/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).

Weitere Informationen zum Arbeiten mit Forks findest du unter [Einen Fork synchronisieren](/de/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork).

## Weiterführende Lektüre

* [Kapitel „Remotes“ im Buch „Pro Git“](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes)
* [
  `git remote` Hauptseite](https://git-scm.com/docs/git-remote.html)
* [Git-Spickzettel](/de/enterprise-server@3.22/get-started/git-basics/git-cheatsheet)
* [Git-Workflows](/de/enterprise-server@3.22/get-started/git-basics/git-workflows)
* [Git-Handbuch](https://guides.github.com/introduction/git-handbook/)