Frage

Ich mag Änderungen von einem bestimmten rückgängig zu nur zu einer bestimmten Datei zu begehen.

Kann ich git revert Befehl für das?

Eine andere einfache Möglichkeit, es zu tun?

War es hilfreich?

Lösung

Die sauberste Art, wie ich dies zu tun gesehen habe beschrieben hier

git show some_commit_sha1 -- some_file.c | git apply -R

ähnlich wie VonC Antwort aber mit git show und git apply.

Andere Tipps

Unter der Annahme, ist es in Ordnung, die Geschichte begehen zu ändern, hier ist ein Workflow wieder Änderungen in einer einzigen Datei in einem früheren begehen:

Zum Beispiel wollen Sie Änderungen in 1 Datei wiederherzustellen (badfile.txt) in aaa222 begehen:

aaa333 Good commit
aaa222 Problem commit containing badfile.txt
aaa111 Base commit

Rebase auf der Basis verpflichten, zu ergänzen, um das Problem zu begehen, und weiter.

1) Starten der interaktive Unterfütterungsmaterial:

git rebase -i aaa111

2) Markieren Sie das Problem für die Bearbeitung im Editor begehen, indem pick zu e (für die Bearbeitung zu ändern):

e aaa222
pick aaa333

3) Revert wechselt auf die schlechte Datei:

git show -- badfile.txt | git apply -R

4) die Änderungen speichern und ändern die commit:

git add badfile.txt
git commit --amend

5) Beenden Sie das Fütterungsmaterial:

git rebase --continue

git revert wird für alle Datei Inhalte innerhalb Commits.

Für eine einzelne Datei, können Sie script es :

#!/bin/bash

function output_help {
    echo "usage: git-revert-single-file <sha1> <file>"
}

sha1=$1
file=$2

if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi

(Aus dem git-Shell-Skripte Dienstprogramme von smtlaissezfaire )


Hinweis:

eine andere Art und Weise ist hier beschrieben wenn Sie noch haben Ihre aktuelle Änderung zu übernehmen.

git checkout -- filename

git checkout hat einige Optionen für eine Datei, die Datei von HEAD ändern, überschreiben Ihre Änderung.


Dropped.on.Caprica erwähnt in den Kommentaren :

  

Sie können einen Alias ??zu git hinzufügen, damit Sie git revert-file <hash> <file-loc> tun können und müssen, dass bestimmte Datei rückgängig gemacht werden.
  Siehe dieser Kern .

[alias]
  revert-file = !sh /home/some-user/git-file-revert.sh

Ich würde einfach die --no-commit Option git-revert verwenden und entfernen Sie die Dateien, die Sie nicht aus dem Index schließlich rückgängig gemacht werden sollen, bevor sie zu begehen. Hier ist ein Beispiel dafür, wie man leicht zurück wechselt nur die Änderungen an foo.c in den zweitletzten begehen:

$ git revert --no-commit HEAD~1
$ git reset HEAD
$ git add foo.c
$ git commit -m "Reverting recent change to foo.c"
$ git reset --hard HEAD

Die erste git-reset „unstages“ alle Dateien, so dass wir dann wieder nur die eine Datei hinzufügen können wir rückgängig gemacht werden sollen. Der endgültige git-reset --hard wird die verbleibenden Datei kehrt zu befreien, dass wir nicht halten wollen.

git reset HEAD^ path/to/file/to/revert/in/commit

Der obige Befehl Datei aus begehen nehmen, aber es wird in git status widerspiegelt.

git checkout path/to/file/to/revert/in/commit

Der obige Befehl wird die Änderungen rückgängig machen (als Ergebnis Sie Datei gleichen wie HEAD erhalten).

git commit

(Pass --amend zu ändern zu begehen.)

git push

Damit die die Datei bereits in der Commit wird entfernt und rückgängig gemacht.

Die oben genannten Schritte sollten von dem dem Zweig folgen, wo der Commit gemacht wird.

Viel einfacher:

git reset HEAD^ path/to/file/to/revert

dann

git commit --amend   

und dann

git push -f

die Datei ist weg und begeht Hash, Nachricht, usw. ist das gleiche.

Sie können dieses Verfahren wie folgt vor:

  1. git revert -n <*commit*> (-n revert alle Änderungen aber nicht verpflichten sie)
  2. git add <*filename*> (Name der Datei / s Sie wollen zurückkehren & Festschreibung)
  3. git commit -m 'reverted message' (fügen Sie eine Nachricht für die Rück)
  4. , nachdem Sie die anderen Dateien zu begehen Änderungen verwerfen, so dass die Dateien Aufenthalt mit den Änderungen aktualisiert Sie vor dem revert begangen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top