Frage Setzen Sie den lokalen Repository-Zweig genauso zurück wie HEAD des Remote-Repositorys


Wie setze ich meinen lokalen Zweig auf den Zweig im Remote-Repository zurück?

Ich tat:

git reset --hard HEAD

Aber wenn ich ein laufe 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

Kannst du mir bitte sagen, warum ich diese "modifiziert" habe? Ich habe diese Dateien nicht berührt? Wenn ich es getan habe, möchte ich diese entfernen.


2515
2017-10-27 00:27


Ursprung


Antworten:


Sie können Ihren Zweig so einrichten, dass er genau mit dem Remote-Zweig übereinstimmt. Dies geschieht in zwei Schritten:

git fetch origin
git reset --hard origin/master

Wenn Sie den Status Ihrer aktuellen Zweigstelle 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 in der Verzweigung "Meine-gespeicherte Arbeit" gespeichert, falls Sie sich entscheiden, dass Sie sie zurück haben wollen (oder sie später ansehen oder gegen Ihre aktualisierte Niederlassung abgleichen wollen).

Beachten Sie, dass das erste Beispiel davon ausgeht, dass der Name des Remote-Repos "Ursprung" ist und dass der Zweig "Master" im Remote-Repository mit dem aktuell ausgecheckten Zweig in Ihrem lokalen Repository übereinstimmt.

BTW, diese Situation, in der Sie sich befinden, sieht sehr ähnlich aus wie ein gewöhnlicher Fall, bei dem ein Push in den aktuell ausgecheckten Zweig eines Nicht-Bare-Repositories durchgeführt wurde. Haben Sie kürzlich in Ihr lokales Repo gedrängt? Wenn nicht, dann keine Sorge - etwas anderes muss dazu geführt haben, dass diese Dateien unerwartet modifiziert wurden. Andernfalls sollten Sie beachten, dass es nicht empfohlen wird, in ein nicht-bare-Repository zu pushen (und nicht in den gerade ausgecheckten Zweig).


4460
2017-10-27 01:44



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

git fetch origin
git reset --hard origin/master

Gefolgt von:

git clean -f

um lokale Dateien zu entfernen

Um zu sehen, welche Dateien entfernt werden (ohne sie wirklich zu entfernen):

git clean -n -f

250
2017-12-27 06:20



Zuerst auf das zuvor abgerufene zurücksetzen HEAD des entsprechenden Upstream-Zweiges:

git reset --hard @{u}

Der Vorteil der Spezifikation @{u} oder seine ausführliche Form @{upstream} ist, dass der Name des entfernten Repos und Zweigs nicht explizit angegeben werden muss.

Als nächstes entfernen Sie bei Bedarf nicht nachverfolgte Dateien, optional auch mit -x:

git clean -df

Schließlich erhalten Sie bei Bedarf die neuesten Änderungen:

git pull

118
2018-02-10 20:27



git reset --hard HEAD wird nur auf den zuletzt festgelegten Status zurückgesetzt. In diesem Fall bezieht sich HEAD auf den HEAD Ihrer Filiale.

Wenn Sie mehrere Commits haben, wird dies nicht funktionieren.

Was Sie wahrscheinlich tun möchten, wird auf den Ursprungspunkt oder was auch immer Sie Remote-Repository aufgerufen wird zurückgesetzt. Ich würde wahrscheinlich so etwas tun

git reset --hard origin/HEAD

Sei aber vorsichtig. Hard-Resets können nicht einfach rückgängig gemacht werden. Es ist besser, zu tun, wie Dan vorschlägt, und eine Kopie Ihrer Änderungen abzuzweigen, bevor Sie zurücksetzen.


91
2017-10-27 01:08



Alle oben genannten Vorschläge sind richtig, aber oft zu Ja wirklich Setzen Sie Ihr Projekt zurück, Sie müssen auch Dateien entfernen, die sich in Ihrem befinden .gitignore.

Um das moralische Äquivalent zu bekommen Löschen Ihres Projektverzeichnisses und erneutes Klonen von der Fernbedienung ist:

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

Warnung: git clean -x -d -f ist irreversibel und Sie verlieren möglicherweise Dateien und Daten (z. B. Dinge, die Sie ignoriert haben .gitignore).


57
2017-07-23 17:48



Die Frage mischt hier zwei Fragen:

  1. wie man eine lokale Verzweigung an den Punkt zurücksetzt, an dem sich die Fernbedienung befindet
  2. wie Sie Ihren Staging-Bereich (und möglicherweise das Arbeitsverzeichnis) löschen, so dass git statussagt nothing to commit, working directory clean.

Die One-Stop-Antwort lautet:

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

29
2018-01-31 01:29



Dies ist etwas, dem ich regelmäßig gegenüberstehe, und ich habe das oben von Wolfgang zur Verfügung gestellte Skript verallgemeinert, um mit jedem Zweig zu arbeiten

Ich fügte auch eine "Sind Sie sicher" -Prompt und einige Feedback-Ausgabe hinzu

#!/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

20
2017-11-09 13:01



Hier ist ein Skript, das automatisiert, was die populärste Antwort vorschlägt ... Sehen https://stackoverflow.com/a/13308579/1497139 für eine verbesserte Version, die Zweige unterstützt

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://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"`
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

11
2017-10-15 08:50



Vorausgesetzt, dass das Remote-Repository ist originund das interessiert dich branch_name:

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

Sie gehen auch für den aktuellen Zweig von zurücksetzen origin zu HEAD.

git fetch origin
git reset --hard origin/HEAD

Wie es funktioniert:

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

Dann ist die git reset setzt das zurück <branch_name> verzweige zu dem, was du gerade geholt hast. Das --hard Option ändert alle Dateien in Ihrem Arbeitsbaum so, dass sie mit den Dateien übereinstimmen origin/branch_name.


11
2018-05-08 11:12



Ich tat:

git branch -D master
git checkout master

um den Zweig vollständig zurückzusetzen


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


10
2018-05-14 07:48