windows - Få den fulde git log efter at have rullet tilbage til en tidligere version

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er ny til at git, og sandsynligvis ikke bruger korrekt terminologi, så tag med mig :)


Lad os sige, at jeg har et lager med 5 ændringer, f.eks.


D:	estgitrepo2>git log --oneline
3a5fd33 555
3cfbfae 444
e9a78c8 333
a618586 222
b80d5e1 111


Jeg lærte at jeg kan synkronisere tilbage til en tidligere revision ved at gøre:


D:	estgitrepo2>git reset e9a78c8 --hard
HEAD is now at e9a78c8 333


Mit spørgsmål er: Hvordan kan jeg få den fulde log, så jeg kan gå tilbage til den seneste revision?


Running log viser ikke længere disse revisioner:


D:	estgitrepo2>git log --oneline
e9a78c8 333
a618586 222
b80d5e1 111


Jeg har også forsøgt at tilføje den - alle switche, som ikke gjorde en forskel. I Mercurial, under det samme scenario, kører 'hg log' den komplette log, selv efter at jeg har opdateret til en tidligere revision.

Bedste reference


Jeg går ud fra at 'synkronisere tilbage', du mener virkelig, at du bare vil have din arbejdskopi til at ligne et tidligere tidspunkt. For at gøre det, vil du have checkout, ikke reset:


> git checkout e9a78c8


På det tidspunkt ser dit lager således ud:


> git log master --oneline
3a5fd33 555   <--- master is still here
3cfbfae 444
e9a78c8 333   <--- HEAD (working copy) is here
a618586 222
b80d5e1 111


Nu for at komme tilbage til den seneste forpligter på master, bare git checkout master igen.


Ved at bruge reset fik du det i stedet:


> git log master --oneline
e9a78c8 333   <--- HEAD (working copy) and master are here
a618586 222
b80d5e1 111

Andre referencer 1


Brug af git reset opdaterer markøren (refs/heads/master) for at pege på en tidligere revision. Det gør faktisk ikke en ny revision, der effektivt ruller tilbage til den tidligere revision, som jeg antager er, hvad din 'Mercurial equivalent' gør (og det er lidt som hvad git revert gør.


Git beholder dog en logfil af hvordan refs/heads/master har ændret sig over tid og en separat for HEAD. Du kan se dette i forholdsvis rå form ved hjælp af


git reflog show HEAD


(eller master) eller i en mere velkendt form ved simpelthen at bruge


git log -g


Denne tilstand af git-logg viser reflog-indgange frem for at gå gennem revisionsgrafen: git log -g -n 10 viser de sidste 10 ting, som HEAD pegede på - så det ville være det samme som git log -n 10 hvis alt du havde gjort var almindelig git commit s.


Det vil dog også vise skiftende grene, nulstilling osv.


git log -g master


vil kun vise reflogposter, hvor masterafdelingen er ændret (ændrede filialer vises slet ikke i nogen gren reflog).

Andre referencer 2


Hvis du vil gå tilbage, overvej at lave en (hovedløs) checkout i stedet (git checkout HEAD^)





Jeg tror, ​​du simpelthen behøvede


git log HEAD@{1}


Så f.eks. på en frisk repo


mkdir -pv /tmp/repo
cd /tmp/repo
git init
touch a 
git add .
git commit -am 1
echo something > a
git commit -am 2
git reset --hard HEAD^
git log HEAD@{1}


Produktion:


commit ca6f2c6c1b07895816a1b75973035a20a0238607
Author: Seth <sehe@xxxxxxxxx>
Date:   Thu Apr 21 01:17:06 2011 +0200

    2

commit d71ea3dfa89771af6d3ae2d0e88e1dc6ccce48b8
Author: Seth <sehe@xxxxxxxxx>
Date:   Thu Apr 21 01:16:56 2011 +0200

    1