it-swarm.com.de

Git: Auschecken einer Datei aus einem früheren Commit und Ändern in HEAD

Ich habe kürzlich eine Datei an den HEAD meiner Zweigstelle übergeben, die Fehler enthält. Ich muss die folgenden Dinge tun:

  • Holen Sie sich diese Datei von einem Commit vor HEAD 

  • Übertragen Sie diese Datei wieder in HEAD. 

Was ist der beste Weg, um das zu erreichen?

61
Coocoo4Cocoa

Sie haben es praktisch selbst gesagt:

Holen Sie sich zuerst die Datei von einem Commit zurück:

$> git checkout HEAD~1 path/to/file.ext

Dann begehen Sie es:

$> git commit -a -m 'Retrieved file from older revision'

Wenn nur die Änderungen an dieser Datei im letzten Commit vorhanden waren, können Sie sogar git-revert verwenden:

$> git revert HEAD

Ich denke, es wäre besser, dies zu einem separaten Commit zu machen, weil es Ihnen genau sagt, was Sie zurückgesetzt haben und warum. Sie können dies jedoch mit dem --amend-Schalter zu git-commit in das vorherige Commit eindrücken.

93
sykora

Seien Sie in diesem Szenario vorsichtig:

Commit hash - File modified
aaaaaaa       index.php
bbbbbbb       test.php
ccccccc       index.php

Git checkout HEAD ~ 1 (oder HEAD ^) index.php versucht, die index.php -Datei mit dem vorherigen HEAD -Hash (bbbbbbb) auszuchecken. Dies ist jedoch nicht die eigentliche vorherige Commit-Hash-Datei, sondern ccccccc. Im vorherigen HEAD -Hash bleibt index.php unverändert, da die letzte Änderung im Hash-ccccccc vorgenommen wurde.

Um eine Datei auf den vorherigen Commit-Hash zurückzusetzen, der die Datei betroffen hat, verwenden Sie:

git log -n 2 --pretty=format:%h path/to/file.ext

Ignoriere den ersten Hash und nimm den zweiten Hash, dann:

git checkout <second_hash> path/to/file.ext
git commit -m 'Revert this file to real previous commit'
0
Tecnocat