Ik heb een project waarin ik git init
heb uitgevoerd.
Na een aantal commits, deed ik git status
die me vertelde dat alles up to date was en er geen lokale wijzigingen waren.
Toen maakte ik een aantal opeenvolgende wijzigingen en realiseerde ik me dat ik alles weg wilde gooien en terug wilde naar mijn oorspronkelijke staat. Zal dit commando dat voor me doen?
git reset --hard HEAD
Als je wijzigingen in je werkkopie wilt terugdraaien, doe je dit:
git checkout .
Als je veranderingen aan de index wilt terugdraaien (d.w.z. die je zelf hebt toegevoegd), doe dan dit. Waarschuwing: dit zal al je unpushed commits terugzetten naar master!:
git reset
Als je een wijziging wilt terugdraaien die je hebt gecommit, doe dan dit:
git revert <commit 1> <commit 2>
Als je ongevolgde bestanden wilt verwijderen (bijv. nieuwe bestanden, gegenereerde bestanden):
git clean -f
Of untracked directories (b.v. nieuwe of automatisch gegenereerde directories):
git clean -fd
Opmerking: U kunt ook
git clean -fd
als
git reset --hard
zal niet niet-getrackte bestanden verwijderen, terwijl git-clean alle bestanden uit de getrackte hoofdmap zal verwijderen die niet onder git-tracking vallen. WAARSCHUWING - WEES HIER VOORZICHTIG MEE! Het is handig om eerst een dry-run met git-clean te draaien, om te zien wat het zal verwijderen.
Dit is ook vooral handig als je de foutmelding krijgt
~"performing this command will cause an un-tracked file to be overwritten"
Wat kan gebeuren wanneer je verschillende dingen doet, een ervan is het updaten van een werkkopie wanneer jij en je vriend allebei een nieuw bestand met dezelfde naam hebben toegevoegd, maar hij'heeft het eerst in de broncontrole gecommit, en jij'geeft er niet om dat je je ongevolgde kopie verwijdert.
In deze situatie zal het uitvoeren van een proefversie je ook helpen om een lijst van bestanden te laten zien die overschreven zouden worden.
Kijk eens in git-reflog. Het zal een lijst maken van alle toestanden die het onthoudt (standaard is 30 dagen), en je kunt eenvoudig degene die je wilt uitchecken. Bijvoorbeeld:
$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d