Git: Eine geänderte Datei auf den Stand in einem anderen Zweig zurücksetzen?

Lesezeit: 3 Minuten

Angenommen, ich habe meinen eigenen Zweig erstellt develop branch und fileA ein paar Mal in ein paar Commits geändert, jetzt möchte ich nur diese Datei in den Zustand in zurückversetzen develop (ohne meine anderen Änderungen rückgängig zu machen), gibt es eine einfache Möglichkeit, dies zu tun? (Ich weiß, ich könnte es auschecken develop und in meinem Zweig überschreiben).

Vielen Dank!

Sie machen

git checkout develop -- <path/to/file>

  • Ja, aber seien Sie vorsichtig, dass Sie alle Änderungen verlieren, die Sie in Ihrem Arbeitsverzeichnis für diese Datei haben.

    – William Kinan

    15. Juni 2019 um 7:33 Uhr

  • Danach müssen wir diese Datei hinzufügen und festschreiben, damit sie in den Upstreams widergespiegelt wird. Andernfalls wird die zuvor festgeschriebene Version fortgesetzt

    – Shiva Tumma

    17. Juni 2019 um 7:40 Uhr

  • Ich musste Änderungen an Zeilenumbrüchen und Leerzeichen rückgängig machen. Ich habe versucht, über den Editor zurückzukehren, konnte es aber nicht. Dieser Befehl hat meinen Job gemacht!

    – aagjalpankaj

    28. Januar um 16:49 Uhr

Benutzeravatar von Noufal Ibrahim
Noufal Ibrahim

Sie können nicht “zurücksetzen”, da dies auf einer Commit-für-Commit-Basis erfolgt (und nicht Datei für Datei). Es gibt aber zwei Alternativen. Sie können auswählen, was zu Ihnen passt. Nehmen wir an, die betreffende Datei ist quux.c.

  1. Mach ein git rebase -i ab dem punkt wo du die abschneidest develop verzweigen und dann die vorgenommenen Änderungen manuell rückgängig machen quux.c seitdem in jedem Commit. Git schreibt die Commits so um, dass es so aussieht quux.c wurde nie geändert develop wurde geschnitten.
  2. Eine einfachere Route ist einfach zu sagen git show master:quux.c > quux.c. Dadurch wird überschrieben quux.c mit der Version der Datei auf master. Dann füge es hinzu und übertrage es. Dadurch wird ein zusätzliches “revert”-Commit erstellt, aber es ist einfacher als das obige.

Aktualisieren

Wie die anderen Antworten richtig zeigen, git checkout branch -- file ist benutzerfreundlicher als die git show Befehl, den ich hier erwähnt habe, obwohl der Effekt derselbe ist.

  • Vielen Dank! Die zweite ist viel einfacher, da die Datei einige Male geändert wurde.

    – hzxu

    27. Juni 2017 um 5:15 Uhr

  • @hzxu ja, aber es hat zwei “Nachteile” 1. Es wird ein neues Commit einführen und 2. Die früheren Commits haben die modifizierten Versionen von quux.c Wenn Sie also einen Zweig von dort abschneiden, erhalten Sie diese Version zurück.

    – Noufal Ibrahim

    27. Juni 2017 um 5:16 Uhr

Siehe diese Links:

Wie rufe ich eine einzelne Datei aus einer bestimmten Revision in Git ab?

So erhalten Sie nur eine Datei aus einem anderen Zweig

git show source_branch:path/to/file > file

funktioniert gut, außer dass Sie, wie in der SO-Frage “Wie rufe ich eine einzelne Datei aus einer bestimmten Revision in Git?” beschrieben, den vollständigen Pfad aus dem Stammverzeichnis des Repos verwenden müssen.

Sie erhalten nur den neuesten Stand der Datei. Aber für git checkout oder git show können Sie tatsächlich auf jede gewünschte Revision verweisen, wie in der SO-Frage “git checkout revision of a file in git gui” veranschaulicht:

$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME

wäre dasselbe, wenn $FILENAME ein vollständiger Pfad einer versionierten Datei ist.

$REVISION kann wie in git rev-parse gezeigt aussehen:

experiment@{yesterday}:app.js # app.js as it was yesterday 
experiment^:app.js            # app.js on the first commit parent
experiment@{2}:app.js         # app.js two commits ago

usw.

1429490cookie-checkGit: Eine geänderte Datei auf den Stand in einem anderen Zweig zurücksetzen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy