Setzen Sie den lokalen Repository-Zweig so zurück, dass er dem HEAD des Remote-Repositorys entspricht


3853

Wie setze ich meinen lokalen Zweig so zurück, dass er dem Zweig im Remote-Repository entspricht?

Ich tat:

git reset --hard HEAD

Aber wenn ich a git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

Können Sie mir bitte sagen, warum ich diese "modifiziert" habe? Ich habe diese Dateien nicht berührt? Wenn ich das getan habe, möchte ich diese entfernen.


8
Entsprechend ist die Ausgabe git statusIhres zweiten Befehls git reset --hard HEADfehlgeschlagen. Sie haben die Ausgabe jedoch nicht eingefügt. → Unvollständige Frage.
Robert Siemer

2
Sie mischen zwei Fragen hier: 1) , wie eine lokale Niederlassung auf den Punkt zurückzustellen , wo die Fernbedienung und 2) , wie Sie Ihren Staging - Bereich löschen (und möglicherweise das Arbeitsverzeichnis), so dass git statussagt nothing to commit, working directory clean. - Bitte angeben!
Robert Siemer

Antworten:


6691

Das Einstellen Ihres Zweigs auf den Remote-Zweig kann in zwei Schritten erfolgen:

git fetch origin
git reset --hard origin/master

Wenn Sie den Status Ihres aktuellen Zweigs speichern möchten, bevor Sie dies tun (nur für den Fall), können Sie Folgendes tun:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Jetzt wird Ihre Arbeit im Zweig "Meine gespeicherte Arbeit" gespeichert, falls Sie entscheiden, dass Sie sie zurückhaben möchten (oder sie später ansehen oder gegen Ihren aktualisierten Zweig abweichen möchten).

Beachten Sie, dass im ersten Beispiel davon ausgegangen wird, dass der Name des Remote-Repos "Ursprung" ist und dass der Zweig mit dem Namen "Master" im Remote-Repo mit dem aktuell ausgecheckten Zweig in Ihrem lokalen Repo übereinstimmt.

Übrigens, diese Situation, in der Sie sich befinden, ähnelt einem häufigen Fall, in dem ein Push in den aktuell ausgecheckten Zweig eines nicht nackten Repositorys durchgeführt wurde. Haben Sie kürzlich in Ihr lokales Repo gestoßen? Wenn nicht, dann keine Sorge - etwas anderes muss dazu geführt haben, dass diese Dateien unerwartet geändert wurden. Andernfalls sollten Sie sich darüber im Klaren sein, dass es nicht empfohlen wird, in ein nicht nacktes Repository zu pushen (und insbesondere nicht in den aktuell ausgecheckten Zweig).


4
Vielen Dank für Ihre Antwort. Sie sagten: "Beachten Sie, dass im ersten Beispiel davon ausgegangen wird, dass der Name des Remote-Repos" Ursprung "ist und dass der Zweig mit dem Namen" Master "im Remote-Repo mit dem Zweig in Ihrem lokalen Repo übereinstimmt." Wie kann ich den Namen meines Remote-Repos und meinen Filialnamen überprüfen, um sicherzugehen, bevor ich 'git reset --hard' ausführe? Danke noch einmal.
Hap497

21
Wenn Sie die Fernbedienung nicht explizit benannt haben, ist ihr Name wahrscheinlich nur "Ursprung" (Standardeinstellung). Sie können "git remote" verwenden, um eine Liste aller Remote-Namen abzurufen. Sie können dann "git remote <Name>" verwenden, um zu sehen, welche Zweige miteinander drücken / ziehen (z. B. wenn Ihr "Master" -Zweig von "master" in der Fernbedienung mit dem Namen "origin" geklont wurde, erhalten Sie eine Zeile das heißt "Master verschmilzt mit Remote Master").
Dan Moulding

6
"Es wird nicht empfohlen, in ein nicht nacktes Repository zu pushen (und nicht in die derzeit
ausgecheckte

27
Ich glaube, Sie können es auch gleich nach dem Abrufen tun git reset FETCH_HEAD --hard, das ist die gleiche Bedeutung.
Jean

6
Von mir hinzugefügte Dateien wurden nicht entfernt.
Trismegistos

416

Ich musste tun (die Lösung in der akzeptierten Antwort):

git fetch origin
git reset --hard origin/master

Gefolgt von:

git clean -f

um lokale Dateien zu entfernen

So sehen Sie, welche Dateien entfernt werden (ohne sie tatsächlich zu entfernen):

git clean -n -f

89
auch, git clean -d -fwenn nicht verfolgte Verzeichnisse vorhanden sind.
Garg

54
auchgit clean -fdx
Swapnil Kotwal

14
Wenn Sie eine genaue Kopie des Remote-Zweigs wünschen, müssen Sie git clean -ffdx folgen. Beachten Sie, dass es sich um zwei f handelt.
Trismegistos

6
Das git clean -fwar das wesentliche Stück, das ich brauchte. Vielen Dank!
dgo

17
Seien Sie vorsichtig mit dem Befehl clean. Es kann ignorierte Dateien aus anderen Zweigen löschen.
Mikoop

307

Setzen Sie zunächst auf den zuvor abgerufenen HEADdes entsprechenden Upstream-Zweigs zurück:

git reset --hard @{u}

Der Vorteil der Angabe @{u}oder ihrer ausführlichen Form @{upstream}besteht darin, dass der Name des Remote-Repos und der Verzweigung nicht explizit angegeben werden muss.

Entfernen Sie anschließend nach Bedarf nicht verfolgte Dateien, optional auch mit -x:

git clean -df

Holen Sie sich schließlich nach Bedarf die neuesten Änderungen:

git pull

54
Dies scheint eine bessere Antwort zu sein als die akzeptierte, da sie dynamisch auf den aktuellen Upstream-Zweig zurückgesetzt wird und nicht immer statisch wieorigin/master
Jon z

@ Jonz genau richtig, das @{upstream}ist sehr praktisch und kann in Aliasnamen verwendet werden:alias resetthisbranch="git reset --hard @{upstream}"
Siddhartha

1
@GangadharJannu git reset --harderfordert ein Commit, sonst würde es nicht wissen, worauf Sie zurückgesetzt werden sollen. @{u}zeigt auf ein bestimmtes Commit - den Kopf des verfolgten Zweigs, ab dem Zeitpunkt, an dem Sie das letzte Mal einen ausgeführt haben git fetch.
Kristoffer Bakkejord

1
@KristofferBakkejord Vielen Dank für die Erklärung, aber auch ohne Commit-Hash können wir tun, git reset --hardobwohl es nicht auf Remote-Zweig zurückgesetzt wird
Gangadhar JANNU

3
Verwenden Sie für alle anderen, die hier fast eine neue Frage gestellt haben, wenn Sie von Powershell aus gits verwenden, Anführungszeichen ( git reset --hard "@{u}"). Ich habe eine Weile gebraucht, um das herauszufinden.
MPStoering

112

git reset --hard HEADwird eigentlich nur auf den zuletzt festgeschriebenen Zustand zurückgesetzt. In diesem Fall bezieht sich HEAD auf den HEAD Ihrer Niederlassung.

Wenn Sie mehrere Commits haben, funktioniert dies nicht.

Was Sie wahrscheinlich tun möchten, ist das Zurücksetzen auf den Ursprungskopf oder wie auch immer Ihr Remote-Repository heißt. Ich würde wahrscheinlich einfach so etwas machen

git reset --hard origin/HEAD

Sei aber vorsichtig. Hard Resets können nicht einfach rückgängig gemacht werden. Es ist besser, wie von Dan vorgeschlagen, eine Kopie Ihrer Änderungen zu verzweigen, bevor Sie sie zurücksetzen.


2
In meiner Antwort gab es einen falschen Vorschlag, den Dan zuvor gefangen hatte. Ich habe es weggeschnitten, da ich niemanden in die Irre führen möchte. Ich gehe davon aus, dass das Origin / Master- oder Origin / HEAD-Zeug davon abhängt, ob Sie tatsächlich zuerst einen Abruf durchführen oder nicht. Wenn Sie nur den Ursprung geklont haben und er keine anderen Zweige hatte, was meiner Meinung nach recht häufig ist, sollte er ihn in Ordnung zurücksetzen. Aber natürlich hat Dan recht.
Mikael Ohlson

73

Alle oben genannten Vorschläge sind richtig, aber um Ihr Projekt wirklich zurückzusetzen, müssen Sie häufig auch Dateien entfernen, die sich in Ihrem befinden .gitignore.

Um das moralische Äquivalent zum Löschen Ihres Projektverzeichnisses und zum erneuten Klonen von der Fernbedienung zu erhalten, gehen Sie wie folgt vor:

git fetch
git reset --hard
git clean -x -d -f

Warnung : git clean -x -d -fist irreversibel und Sie können Dateien und Daten verlieren (z. B. Dinge, die Sie ignoriert haben .gitignore).


12
Warnung: "git clean -x -d -f" ist irreversibel und Sie können Dateien und Daten in .gitignore
Akarsh Satija

Etwas kürzer: git clean -xdfdas ist gleich git clean -x -d -f.
Kiryl

git clean -ffxd, um alles zu entfernen, was nicht im Repo ist
Trismegistos

44

Verwenden Sie die folgenden Befehle. Diese Befehle entfernen auch alle nicht verfolgten Dateien aus dem lokalen Git

git fetch origin
git reset --hard origin/master
git clean -d -f

6
Dies ist eine vollständigere Antwort, da git clean -d -fwir ohne die noch einige Dinge des alten Zweigs im lokalen Verzeichnis hatten. Danke, Mann.
Flavio

3
Dies ist es, was es WIRKLICH macht, genau wie die Fernbedienung zu sein. Die Reinigung ist wichtig.
David S.

1
git clean -ffxd, um wirklich alles zu entfernen
Trismegistos

1
Genau das brauchte ich. Danke
AllJs

38

Die Frage vermischt hier zwei Themen:

  1. So setzen Sie einen lokalen Zweig auf den Punkt zurück, an dem sich die Fernbedienung befindet
  2. wie Sie Ihren Staging - Bereich (und möglicherweise das Arbeitsverzeichnis) zu löschen, so dass git statussagtnothing to commit, working directory clean.

Die Antwort aus einer Hand lautet:

  1. git fetch --prune (optional) Aktualisiert den lokalen Snapshot des Remote-Repos. Weitere Befehle sind nur lokal.
    git reset --hard @{upstream}Setzt den lokalen Verzweigungszeiger auf die Position des Snapshots der Fernbedienung und setzt den Index und das Arbeitsverzeichnis auf die Dateien dieses Commits.
  2. git clean -d --force Entfernt nicht verfolgte Dateien und Verzeichnisse, die Git daran hindern, "Arbeitsverzeichnis bereinigen" zu sagen.

1
Für die @{upstream}Syntax muss Upstream festgelegt werden. Dies geschieht standardmäßig, wenn Sie dies tun git checkout <branchname>. - Andernfalls ersetzen Sie es durch origin/<branchname>.
Robert Siemer

Hinzufügen -xzu git clean, um alles zu entfernen, was nicht im Commit enthalten ist (dh sogar Dateien, die mit dem .gitignore-Mechanismus ignoriert werden).
Robert Siemer

22

Dies ist etwas, mit dem ich regelmäßig konfrontiert bin, und ich habe das oben bereitgestellte Skript Wolfgang verallgemeinert, um mit jedem Zweig zu arbeiten

Ich habe auch eine Eingabeaufforderung "Bist du sicher" und eine Feedback-Ausgabe hinzugefügt

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

3
Möglicherweise möchten Sie "git remote" verwenden, um den Namen der Fernbedienung abzurufen. In bestimmten Fällen wird es nicht "Ursprung" sein
Yurik

17

Vorausgesetzt, das Remote-Repository ist vorhanden originund Sie interessieren sich für branch_name:

git fetch origin
git reset --hard origin/<branch_name>

Außerdem setzen Sie den aktuellen Zweig von originauf zurück HEAD.

git fetch origin
git reset --hard origin/HEAD

Wie es funktioniert:

git fetch origin lädt das Neueste von der Fernbedienung herunter, ohne zu versuchen, etwas zusammenzuführen oder neu zu starten.

Dann git resetsetzt der <branch_name>Zweig auf das zurück, was Sie gerade abgerufen haben. Die --hardOption ändert alle Dateien in Ihrem Arbeitsbaum so, dass sie mit den Dateien in übereinstimmen origin/branch_name.


14

Ich tat:

git branch -D master
git checkout master

Zweig vollständig zurücksetzen


Beachten Sie, dass Sie zu einem anderen Zweig auschecken sollten, um den erforderlichen Zweig löschen zu können


5
Sie sollten die Frage noch einmal lesen, es gibt nichts, was sich auf die Fernbedienung auswirkt, sondern die Einstellung auf die Fernbedienung. Sie sollten also nichts mit der Fernbedienung tun, und dies hat in meinem Fall geholfen und nicht von oben.
user2846569

Wenn Sie es auf das gleiche wie Remote einstellen möchten, sollten Sie zumindest irgendwann einen Abruf durchführen, stimmen Sie nicht zu?
Tim

2
Sie sollten dies zumindest versuchen oder die folgenden Dokumente lesen: kernel.org/pub/software/scm/git/docs/git-checkout.html
user2846569

Gut gemacht, ich hatte eine beschädigte .pck-Datei in der Filiale und die restlichen Optionen funktionierten nicht, danke !!
LuckyBrain

14

Hier ist ein Skript, das automatisiert, was die beliebteste Antwort vorschlägt ... Unter https://stackoverflow.com/a/13308579/1497139 finden Sie eine verbesserte Version, die Zweige unterstützt

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see /programming/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

10

Wenn Sie als ich ein Problem hatten, dass Sie bereits einige Änderungen vorgenommen haben, aber jetzt, aus irgendeinem Grund, den Sie loswerden möchten, ist der schnellste Weg, Folgendes zu verwenden git reset:

git reset --hard HEAD~2

Ich hatte 2 nicht benötigte Commits, daher die Nummer 2. Sie können sie in Ihre eigene Anzahl von Commits ändern, um sie zurückzusetzen.

Beantworten Sie also Ihre Frage: Wenn Sie 5 Commits vor dem HEAD des Remote-Repositorys haben, sollten Sie diesen Befehl ausführen:

git reset --hard HEAD~5

Beachten Sie, dass Sie die vorgenommenen Änderungen verlieren. Seien Sie also vorsichtig!


7

Bei früheren Antworten wird davon ausgegangen, dass der zurückzusetzende Zweig der aktuelle Zweig ist (ausgecheckt). In Kommentaren stellte OP hap497 klar, dass der Zweig zwar ausgecheckt ist, dies jedoch in der ursprünglichen Frage nicht ausdrücklich vorgeschrieben ist. Da es mindestens eine "doppelte" Frage gibt, setzen Sie den Zweig vollständig auf den Repository-Status zurück , wobei nicht davon ausgegangen wird, dass der Zweig ausgecheckt ist. Hier ist eine Alternative:

Wenn der Zweig "mybranch" derzeit nicht ausgecheckt ist , können Sie diesen Befehl auf niedriger Ebene verwenden , um ihn auf den Kopf des entfernten Zweigs "myremote / mybranch" zurückzusetzen :

git update-ref refs/heads/mybranch myremote/mybranch

Diese Methode lässt den ausgecheckten Zweig unverändert und den Arbeitsbaum unberührt. Es bewegt einfach den Kopf von mybranch zu einem anderen Commit, was auch immer als zweites Argument angegeben wird. Dies ist besonders hilfreich, wenn mehrere Zweige auf neue Remote-Köpfe aktualisiert werden müssen.

Seien Sie dabei jedoch vorsichtig und gitküberprüfen Sie Quelle und Ziel mit einem ähnlichen Tool. Wenn Sie dies versehentlich für den aktuellen Zweig tun (und Git wird Sie nicht davon abhalten), werden Sie möglicherweise verwirrt, da der neue Zweiginhalt nicht mit dem Arbeitsbaum übereinstimmt, der sich nicht geändert hat (um den Zweig zu reparieren, aktualisieren Sie ihn erneut). dorthin, wo es vorher war).


7

Das benutze ich oft:

git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;

Beachten Sie, dass es gute Praxis , nicht um Änderungen an Ihrem lokalen Master / entwickelt Zweig ist, sondern die Kasse zu einem anderen Zweig für jede Änderung, mit dem Zweignamen durch die Art der Veränderung vorangestellt, zum Beispiel feat/, chore/, fix/etc. Auf diese Weise nur Sie müssen Änderungen ziehen, keine Änderungen vom Master übertragen. Gleiches gilt für andere Branchen, zu denen andere beitragen. Daher sollte das oben Gesagte nur verwendet werden, wenn Sie Änderungen an einem Zweig festgeschrieben haben, für den sich andere verpflichtet haben und der zurückgesetzt werden muss. Andernfalls vermeiden Sie es in Zukunft, zu einem Zweig zu pushen, zu dem andere pushen, sondern checken Sie aus und drücken Sie über den ausgecheckten Zweig zu diesem Zweig.

Wenn Sie Ihre lokale Niederlassung auf das neueste Commit in der vorgelagerten Niederlassung zurücksetzen möchten, funktioniert dies für mich bisher wie folgt:

Überprüfen Sie Ihre Fernbedienungen, stellen Sie sicher, dass Ihr Upstream und Ihre Herkunft Ihren Erwartungen entsprechen. Wenn nicht wie erwartet git remote add upstream <insert URL>, verwenden Sie z. B. das ursprüngliche GitHub-Repo, von dem Sie sich gegabelt haben, und / oder git remote add origin <insert URL of the forked GitHub repo>.

git remote --verbose

git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force

Auf GitHub können Sie auch den Zweig mit demselben Namen wie den lokalen auschecken, um die Arbeit dort zu speichern. Dies ist jedoch nicht erforderlich, wenn die Ursprungsentwicklung dieselben Änderungen wie der lokale Zweig für gespeicherte Arbeit aufweist. Ich verwende den Entwicklungszweig als Beispiel, aber es kann ein beliebiger vorhandener Zweigname sein.

git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop

Wenn Sie diese Änderungen dann bei Konflikten mit einem anderen Zweig zusammenführen müssen, um die Änderungen in der Entwicklung beizubehalten, verwenden Sie:

git merge -s recursive -X theirs develop

Während des Gebrauchs

git merge -s recursive -X ours develop

um die widersprüchlichen Änderungen von branch_name beizubehalten. Verwenden Sie andernfalls ein Mergetool mitgit mergetool .

Mit all den Änderungen zusammen:

git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;

Beachten Sie, dass Sie anstelle von Upstream / Develop einen Commit-Hash, einen anderen Zweigstellennamen usw. verwenden können. Verwenden Sie ein CLI-Tool wie Oh My Zsh, um zu überprüfen, ob Ihr Zweig grün ist und anzeigt, dass nichts festgeschrieben werden muss und das Arbeitsverzeichnis sauber ist ( was bestätigt oder auch überprüfbar ist durch git status). Beachten Sie, dass dies tatsächlich im Vergleich Commits hinzufügen kann entwickeln Upstream , wenn es etwas hinzugefügt wird , automatisch von einem Commit, zB UML - Diagramme, Lizenz - Header usw., so dass in diesem Fall könnten Sie dann ziehen Sie die Änderungen an , origin developum upstream develop, wenn nötig.


6

Die Antwort

git clean -d -f

wurde unterschätzt ( -d , um Verzeichnisse zu entfernen). Vielen Dank!


Führen Sie einen vollständigen, 100% sauberen Repo-Ordner ohne zusätzliche Dateien aus git clean -xdf. Dadurch werden alle Dateien gelöscht, die git nicht kennt, und Ihr Ordner stimmt genau mit dem überein, was in der Objektliste von git enthalten ist. Beachten Sie, dass Sie -n(z. B. git clean -nxdf) ein "Was-wäre-wenn" hinzufügen können, um zu erfahren, was gelöscht wird, ohne tatsächlich etwas zu tun. ( git clean )
qJake

5

Wenn Sie HEADsowohl für das Arbeitsverzeichnis als auch für den Index zum Status zurückkehren möchten, sollten Sie dies git reset --hard HEADnicht tun HEAD^. (Dies war möglicherweise ein Tippfehler, genau wie der einfache oder doppelte Strich für--hard .)

Bei Ihrer speziellen Frage, warum diese Dateien im Status "Geändert" angezeigt werden, haben Sie möglicherweise einen Soft-Reset anstelle eines Hard-Reset durchgeführt. Dies führt dazu, dass die Dateien, die im HEADCommit geändert wurden, so angezeigt werden, als wären sie bereitgestellt. Dies ist wahrscheinlich das, was Sie hier sehen.


4

Kein Zurücksetzen und Bereinigen schien Auswirkungen auf nicht verfolgte und geänderte Dateien in meinem lokalen Git-Repo zu haben (ich habe alle oben genannten Optionen ausprobiert). Meine einzige Lösung bestand darin, das lokale Repo zu rmen und es von der Fernbedienung neu zu klonen.

Zum Glück hatte ich keine anderen Filialen, die mir wichtig waren.

xkcd: Git


1

Die einzige Lösung, die in allen Fällen funktioniert, die ich gesehen habe, ist das Löschen und erneute Klonen. Vielleicht gibt es einen anderen Weg, aber offensichtlich lässt dieser Weg keine Chance, dass der alte Staat dort zurückbleibt, also bevorzuge ich ihn. Bash Einzeiler, den Sie als Makro festlegen können, wenn Sie in git häufig Probleme haben:

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* geht davon aus, dass Ihre Git-Dateien nicht beschädigt sind


4
Sie können Ihr Betriebssystem auch einfach neu installieren, wenn Sie sicher sein möchten!
Sebastian Scholle

1

Haben Sie vergessen, einen Feature-Zweig zu erstellen, und haben sich versehentlich direkt auf den Master festgelegt?

Sie können den Feature-Zweig jetzt erstellen und den Master zurücksetzen, ohne den Arbeitsbaum (lokales Dateisystem) zu beeinträchtigen , um das Auslösen von Builds, Tests und Problemen mit Dateisperren zu vermeiden:

git checkout -b feature-branch
git branch -f master origin/master

1

Mit nur 3 Befehlen funktioniert es

git fetch origin
git reset --hard origin/HEAD
git clean -f

-3

Wenn es Ihnen nichts ausmacht, Ihre lokalen Änderungen zu speichern, Sie Ihr Repository jedoch so aktualisieren möchten, dass es mit origin / HEAD übereinstimmt, können Sie einfach Ihre lokalen Änderungen speichern und dann Folgendes abrufen:

git stash
git pull
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.