web-dev-qa-db-ger.com

Git ziehen in den falschen Zweig

Ich und ein anderer Entwickler hatten unsere Arbeit zusammengeführt und in eine Nicht-Master-Branche namens Toolwork verschoben. Auf diese Weise haben wir den Rest des Teams nicht beeinflusst. Mein Themenzweig hieß DPM-93 und mein Git Workflow war dies.

# do some work
git checkout DPM-93
git commit -m "did some work"

# catch up
git checkout toolwork
git pull Origin toolwork

# rebase my topic branch
git checkout DPM-93
git rebase toolwork

# merge and Push my changes
git checkout toolwork
git merge --no-ff DPM-93
git Push Origin toolwork

Das funktionierte meistens gut, bis ich aus Versehen diese git-Kommandos ausgab

git checkout toolwork
git pull Origin master

Zu diesem Zeitpunkt tauchten im Filialwerkzeug einige neue Dinge auf, und ich bin mir nicht sicher, wie ich es beseitigen kann, wenn ich meinen Arbeitsbereich lösche und aus dem Repo rekloniere.

Gibt es eine Möglichkeit, dies vor dem Ziehen in den Zustand zu bringen?

60
milkplus
git reset --hard ORIG_HEAD 

Aus der git reset-Manpage (falls Sie gerade den Pull durchgeführt haben):

Rückgängig machen eines Zusammenziehens oder Ziehens

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)
  1. Wenn Sie versuchen, vom Upstream zu aktualisieren, kam es zu vielen Konflikten. Sie waren noch nicht bereit, viel Zeit damit zu verbringen, sich zusammenzuschließen, also entscheiden Sie sich später dafür.
  2. "pull" hat keine Zusammenführungsfestschreibung vorgenommen, daher löscht "git reset --hard", ein Synonym für "git reset --hard HEAD", das Durcheinander aus der Indexdatei und dem Arbeitsbaum.
  3. Fügen Sie einen Zweigzweig mit dem aktuellen Zweig zusammen, was zu einem schnellen Vorlauf führt.
  4. Sie haben jedoch entschieden, dass der Themenzweig noch nicht für den öffentlichen Verbrauch bereit ist.
    "pull" oder "merge" belässt die ursprüngliche Spitze des aktuellen Zweigs immer in ORIG_HEAD. Wenn Sie also hart zurücksetzen, bringen Sie Ihre Indexdatei und den Arbeitsbaum wieder in diesen Zustand und setzen die Spitze des Zweigs darauf zurück verpflichten.

Siehe HEAD UND ORIG_HEAD für mehr.

89
VonC

Setzen Sie den Master-Zweig zurück:

git reset --hard Origin/master
61
Homero Barbosa

Sie können git log verwenden, um den SHA-1 der Revision zu finden, der Sie an der Spitze Ihres toolwork-Zweigs stehen möchten. Verwenden Sie dann git reset --hard <SHA1>, um Ihre Arbeitskopie auf diese Revision zurückzusetzen.

Zuerst alles sichern! Lesen Sie die Manpage für git reset erneut, um sicherzustellen, dass sie das tut, was Sie möchten.

BEARBEITEN: Oh ja, ORIG_HEAD sollte die richtige SHA-1 enthalten. Aber zuerst prüfen.

9
Cameron Skinner

Ich habe kürzlich etwas Ähnliches getan und eine einfachere Lösung basierend auf dieser Antwort verwendet.

Angenommen, der Status des toolwork-Zweigs, den Sie auf zurücksetzen möchten, wurde auf Origin verschoben, können Sie dies einfach tun

git fetch Origin
git reset --hard Origin/toolwork

In meinem Fall wurde der Wert von ORIG_HEAD durch eine andere Zusammenführung in einem anderen Zweig überschrieben. Dabei musste ich mich nicht darum kümmern, nach dem korrekten Commit im Protokoll zu suchen.

4
zelanix

Was für mich funktioniert hat, ist einfach

git reset --hard

Ich habe dies aus dem lokalen Repository mit dem unglücklichen Zusammenführen/Ziehen gemacht:

[email protected] /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2|MERGING)
$ git reset --hard
HEAD is now at 2d5a511 [last commit comment]

[email protected] /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2)
$
0
ssaltman