Das Szenario:
- Ich mache einige Änderungen in einer einzigen Datei lokal und lief
git add
,git commit
undgit push
- Die Datei wird in das Remote-Ursprungs-Master-Repository verschoben
- Ich habe ein anderes lokales Repository, das über Capistrano mit der Methode "remote_cache" aus diesem Remote-Repository bereitgestellt wird
- Jetzt möchte ich nicht die gesamte Anwendung bereitstellen, sondern nur diese einzelne Datei aktualisieren / auschecken.
Ist das mit git irgendwie möglich? Ich konnte nichts finden, was funktionieren würde, und ich konnte es auch nicht herausfinden. Mit SVN habe ich gerade svn up file
und voila.
git
git-checkout
Foresth
quelle
quelle
git restore -s origin/master -- path/to/file
. Siehe meine Antwort unten .Antworten:
Dies ist möglich (im bereitgestellten Repository).
Der Abruf lädt alle zuletzt vorgenommenen Änderungen herunter, fügt sie jedoch nicht in Ihren aktuell ausgecheckten Code (Arbeitsbereich) ein.
Beim Auschecken wird der Arbeitsbaum mit der jeweiligen Datei aus den heruntergeladenen Änderungen aktualisiert (
origin/master
).Zumindest funktioniert dies bei diesen kleinen Tippfehlern, bei denen es seltsam ist, einen Zweig usw. zu erstellen, nur um ein Wort in einer Datei zu ändern.
quelle
git status
sehe ich sie alsChanges to be committed:
- was bedeutet, ich muss sie erneut festschreiben? (Ich habe nur bemerkt, dass ich eine einzelne unberührte Datei aktualisieren wollte, aber das Repo selbst wird auf einem anderen Computer berührt.)Der folgende Code hat bei mir funktioniert:
quelle
quelle
git archive --remote=https://github.com/git/git.git master:git/contrib/completion git-completion.bash | tar -x
Gibt mir eine Fehlermeldung:fatal: Operation not supported by protocol.
tar
: s--to-stdout
,git archive --remote="gitolite3@<host>:<repo>" <tag> <file> | tar xf - --to-stdout
Mit Git 2.23 (August 2019) und dem neuen (noch experimentellen) Befehl
git restore
, der unter " Wie werden alle Dateien aus dem Arbeitsverzeichnis, aber nicht aus dem Staging-Bereich zurückgesetzt? " Zu sehen ist, wäre dies:Die Idee ist:
git restore
befasst sich nur mit Dateien, nicht wie Dateien und Zweigegit checkout
.Siehe " Verwirrt von
git checkout
": hiergit switch
kommt herein)Codersam fügt in den Kommentaren hinzu :
quelle
git restore -s upstream/master -- path/to/file
Was Sie tun können, ist:
Aktualisieren Sie Ihr lokales Git-Repo:
git fetch
Erstellen Sie eine lokale Niederlassung und checken Sie darauf aus:
git branch pouet && git checkout pouet
Wenden Sie das gewünschte Commit auf diesen Zweig an:
git cherry-pick abcdefabcdef
(abcdefabcdef ist der sha1 des Commits, den Sie anwenden möchten)
quelle
git checkout -b pouet
.Oder git stash (wenn Sie Änderungen haben) in dem Zweig, in dem Sie sich befinden, checken Sie den Master aus, suchen Sie nach den neuesten Änderungen und holen Sie sich diese Datei auf Ihrem Desktop (oder in der gesamten App). Kasse der Filiale, in der Sie waren. Git-Stash wird wieder auf den Status angewendet, in dem Sie sich befanden. Korrigieren Sie dann die Änderungen manuell oder ziehen Sie sie, um die Datei zu ersetzen.
Dieser Weg ist nicht sooooo cool, aber er funktioniert auf jeden Fall, wenn ihr nichts anderes herausfinden könnt.
quelle
Ich glaube, ich habe einen einfachen Hack gefunden.
Löschen Sie die Datei, die sich im lokalen Repository befindet (die Datei, die vom letzten Commit auf dem Remote-Server aktualisiert werden soll).
Und dann mach ein
git pull
Da die Datei gelöscht wird, liegt kein Konflikt vor
quelle