Git: Hoe kan ik een enkel bestand updaten/uitchecken van de remote origin master?

Het scenario:

  1. Ik breng lokaal enkele wijzigingen aan in een enkel bestand en voer git add, git commiten git push
  2. uit

  3. Het bestand wordt naar de externe oorsprongshoofdrepository gepusht
  4. Ik heb een andere lokale repository die via Capistrano wordt geïmplementeerd met de “remote_cache”-methode van die externe repository
  5. Nu wil ik niet de hele applicatie implementeren, maar alleen dat ene bestand updaten/uitchecken.

Is dit op de een of andere manier mogelijk met git? Ik kon niets vinden dat zou werken en ik kon het ook niet achterhalen. Met SVN heb ik zojuist svn up filegedaan en voila.


Antwoord 1, autoriteit 100%

Het is mogelijk om te doen (in de geïmplementeerde repository)

git fetch
git checkout origin/master -- path/to/file

De fetch downloadt alle recente wijzigingen, maar zet deze niet in uw huidige uitgecheckte code (werkgebied).

De kassa werkt de werkboom bij met het specifieke bestand van de gedownloade wijzigingen (origin/master).

Dit werkt in ieder geval voor mij voor die kleine typefouten, waarbij het raar voelt om een branch te maken enz. om maar één woord in een bestand te veranderen.


Antwoord 2, autoriteit 6%

De volgende code werkte voor mij:

git fetch
git checkout <branch from which file needs to be fetched> <filepath> 

Antwoord 3, autoriteit 5%

Met GIT 2.23 (augustus 2019) en het nieuwe (nog steeds experimentele) bevel git restore, gezien in “Hoe alle bestanden van de werkmap opnieuw in te stellen, maar niet van Staging Area? “, dat zou zijn:

git fetch
git restore -s origin/master -- path/to/file

Het idee is: git restoreAlleen deals behandelen met bestanden, geen bestanden en Branches als git checkout
Zie “Verward door git checkout“: Dat is waar git switchkomt in)


Codersam voegt In de reacties :

In mijn geval wilde ik de gegevens van mijn stroomopwaarts (van welke ik gevorkt).
Dus zojuist veranderd in:

git restore -s upstream/master -- path/to/file

Antwoord 4, Autoriteit 2%

git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip

Antwoord 5

Wat u kunt doen is:

  1. Update uw lokale git repo:

    git fetch

  2. Bouw een lokale tak en afrekenen op het:

    git branch pouet && git checkout pouet

  3. Pas de commit aan die u wilt op deze branche:

    git cherry-pick abcdefabcdef

    (abcdefabcdef is de SHA1 van de commit die u wilt toepassen)


Antwoord 6

of git stash (als u wijzigingen in wijzigingen hebt) op de branche die u bevindt, checkout-master, trekt u naar de laatste wijzigingen, grijpt u dat bestand naar uw bureaublad (of de hele app). Afrekenen De tak waarop je was. Git Stash Solliciteer terug naar de staat waarin je was, maak dan de wijzigingen handmatig op of sleep het om het bestand te vervangen.

Op deze manier is niet zooooo cool, maar het is def werkt als jullie niets anders uit kunnen vinden.


Antwoord 7

Ik denk dat ik een gemakkelijke hack heb gevonden.

Verwijder het bestand dat u op de lokale repository hebt (het bestand dat u wilt bijgewerkt vanaf de nieuwste commit in de externe server)

en doe dan een git pull

Omdat het bestand is verwijderd, is er geen conflict

Other episodes