5683 Stimmen

Zurücksetzen des Zweigs des lokalen Repositorys auf den des entfernten Repositorys HEAD

Wie setze ich meinen lokalen Zweig so zurück, dass er mit dem Zweig des entfernten Repositorys übereinstimmt?

Das habe ich:

git reset --hard HEAD

Aber wenn ich eine 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 sie "geändert" habe? Ich habe diese Dateien nicht angefasst? Wenn ja, möchte ich sie entfernen.

18 Stimmen

Gemäß der Ausgabe von git status Ihr zweiter Befehl git reset --hard HEAD gescheitert. Allerdings haben Sie die Ausgabe nicht eingefügt. Unvollständige Frage.

5 Stimmen

Sie vermischen hier zwei Themen: 1) wie man eine lokale Verzweigung auf den Punkt zurücksetzt, an dem sich die entfernte Verzweigung befindet, und 2) wie man den Staging-Bereich (und möglicherweise das Arbeitsverzeichnis) löscht, so dass git status sagt nothing to commit, working directory clean . - Bitte angeben!

3 Stimmen

70voto

Jamsheer Punkte 3433

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

50voto

Robert Siemer Punkte 28819

In der Frage werden zwei Themen vermischt:

  1. wie man einen lokalen Zweig auf den Punkt zurücksetzt, an dem sich der entfernte befindet
  2. wie Sie Ihren Staging-Bereich (und möglicherweise das Arbeitsverzeichnis) löschen können, damit git status sagt nothing to commit, working directory clean.

Die Antwort auf diese Frage lautet: aus einer Hand:

  1. git fetch --prune <sup>(optional) Aktualisiert den lokalen Snapshot des entfernten Repos. Weitere Befehle sind nur lokal.</sup>
    git reset --hard @{upstream} <sup> Setzt den Zeiger des lokalen Zweigs auf den Snapshot des entfernten Zweigs und setzt den Index und das Arbeitsverzeichnis auf die Dateien dieser Übergabe.</sup>
  2. git clean -d --force <sup>Entfernt nicht verfolgte Dateien und Verzeichnisse, die Git daran hindern, "Arbeitsverzeichnis sauber" zu sagen.</sup>

35voto

eigenharsha Punkte 1698

Vorausgesetzt, das entfernte Repository ist origin und dass Sie interessiert sind an branch_name :

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

Außerdem setzen Sie den aktuellen Zweig von origin a HEAD .

git fetch origin
git reset --hard origin/HEAD

Wie es funktioniert:

git fetch origin lädt die neueste Version aus der Ferne herunter, ohne zu versuchen, irgendetwas zusammenzuführen oder zu rebasen.

Dann wird die git reset setzt die <branch_name> Verzweigung zu dem, was du gerade geholt hast. Die --hard ändert alle Dateien in Ihrem Arbeitsbaum so, dass sie mit den Dateien in origin/branch_name .

28voto

Andrew Tulloch Punkte 387

Mit diesem Problem werde ich regelmäßig konfrontiert. Ich habe das Skript, das Wolfgang oben zur Verfügung gestellt hat, so verallgemeinert, dass es mit jedem Zweig funktioniert

Ich habe auch eine "Sind Sie sicher"-Eingabeaufforderung 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

28voto

rohithpoya Punkte 426

Sie können den Ursprung abrufen und zurücksetzen, um das Problem zu lösen

 git fetch origin
 git reset --hard origin/master

Sie können Ihre Änderungen vor dem Zurücksetzen wie unten beschrieben speichern,

git stash

Und wenn Sie nach dem Zurücksetzen die Änderungen wiederhaben wollen, können Sie sie einfach ausführen,

git stash apply

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X