Din cauza unor rău cherry-picking, mi locală Git repository este în prezent cinci se angajează față de originea, și nu într-o stare bună. Vreau să scap de toate aceste angajează și începe peste tot din nou.
Evident, ștergerea mea de director de lucru și re-clonarea ar face-o, dar descărcarea totul, de la GitHub din nou mi se pare cam exagerat, nu și o bună utilizare a timpului meu.
Poate git reveni
este ceea ce am nevoie, dar eu nu't vreau să sfârșesc 10 se angajează față de origine (sau chiar șase), chiar dacă aceasta nu obține codul în sine înapoi la dreptul statului. Vreau doar să mă prefac că ultima jumătate de oră nu s-a întâmplat.
Există o comandă simplă care va face acest lucru? Se pare ca un evident caz de utilizare, dar nu'm a nu găsi exemple de acesta.
Rețineți că această întrebare este în mod special despre se angajează, nu despre:
Dacă excesul de comite sunt vizibile doar pentru tine, puteți face doar
git reset ... e greu de origine/<branch_name>
pentru a muta înapoi la în cazul în care originea este. Acest lucru va reseta starea de depozit la comiterea precedentă, și va renunța la toate modificările locale.
Face o git reveni
face nou se angajează să eliminați vechi se angajează într-un mod care ține toată lumea's istorie sănătos.
git reset-tare @{u}
* șterge toate modificările locale pe ramura curentă, inclusiv comite. Am'm a surprins ca nimeni nu a postat încă acest lucru având în vedere că a câștigat't trebuie să se uite la ceea ce se angajează să revină sau să se joace cu ramuri.
* Care este resetat la sucursala curent la @{amonte}
frecvent `de origine/
Pentru a vedea/ia SHA-1 de identitate a comite vrei să vii înapoi
gitk --all
Să se rostogolească înapoi la cel care o comite
git reset --hard sha1_id
!Notă. Toate se angajează că s-au făcut după aceea comite vor fi șterse (și toate dvs. de modificare a proiectului). Deci, în primul rând mai bine clona proiect într-o altă ramură sau copia în alt director.
Am avut o situație în care am vrut pentru a elimina o comite, care era't împins, dar a fost înainte de a comite un altul. Pentru a face acest lucru, am'am folosit următoarea comandă
git rebazare -am CAPUL~2
-> va rebazare ultimele două se angajează
Și am folosit 'drop' pentru a comite semnatura pe care am vrut să o eliminați.
Pentru cei interesați în Visual Studio soluție, aici e treaba:
istoria
. Care va arunca locale se angajează și a reseta starea de repo-ul selectat comis-o. I. e. Modificările, după ce a scos repo va fi pierdut.
Înainte de a răspunde să's adăuga unele fundal, explicând ce este acest "ȘEF". deoarece unele dintre opțiunile de mai jos va duce în cap detașat
"CAPUL" este pur și simplu o referire la curent comite (cele mai recente) pe ramura curentă.
Nu poate fi doar un singur " ȘEF " la un moment dat. (exclusiv git worktree
)
Conținutul de " ȘEF " este stocat în interiorul `.git/CAP și conține 40 de bytes SHA-1 de curent a comis-o.
desprinse CAPUL
Dacă nu sunteți pe cele mai recente comite - în sensul că "ȘEFUL" este îndreptat spre o prealabilă a comis-o în istoria sa numit desprinse CAPUL
.
Pe linia de comandă, se va arata ca asta - SHA-1 în loc de ramura numele de " ȘEF " nu este îndreptat cu vârful de curent ramură
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Acest lucru va checkout nouă ramură de indicare a dorit a comis-o. Această comandă va plateste pentru a o dat a comis-o. În acest moment, puteți crea o sucursală și începe să lucreze la acest moment.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
Îl poți folosi întotdeauna reflog, la fel de bine.
git reflog ` va afișa orice schimbare care a actualizat " ȘEF "și verificarea dorit reflog intrare va stabili" ȘEF " înapoi la acest comis-o.
De fiecare dată când CAPUL este modificat nu va fi o nouă intrare în reflog`
git reflog
git checkout HEAD@{...}
Acest lucru va duce înapoi dorit comite
git reset-hard <commit_id>
"Mut" CAPUL pe spate dorit a comis-o.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
git reveni <sha-1>
"Anula" dat comită sau comite gama. Comanda de resetare va "anula" orice modificări efectuate într-o anumit a comis-o. Un nou comite cu undo patch va fi angajat în timp ce originalul se angajeze va rămâne în istorie la fel de bine.
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
Această schemă ilustrează care comanda ce face.
După cum puteți vedea acolo reset && checkout
modifica CAP
.
Dacă aveți local repo într-un dezastru complet, apoi o modalitate sigură de a arunca locale se angajează în Git este de a...
În experiența mea Eclipse mânere lumea se schimbă în jurul valorii de destul de bine. Cu toate acestea, poate fi necesar să selectați afectate de proiecte în Eclipse și curățați-le pentru a forța Eclipsa să le reconstruim. Cred că alte Ide-ar putea nevoie de o forțat reconstrui prea.
O parte a beneficia de procedura de mai sus este că va afla dacă proiectul se bazează pe fișiere locale care nu au fost puse în git. Dacă găsiți că sunteți fișiere lipsă, atunci puteți să le copiați în de "my_broken_local_repo" și să le adăugați la git. Odată ce aveți încrederea că noul local repo are tot ce aveți nevoie, atunci puteți șterge "my_broken_local_repo".
git reset --hard <SHA-Code>
Acest lucru va veni la îndemână, dacă ați făcut unele greșeli pe copia locală care doriți să vă asigurați că nu't împinși de la distanță filiala din greșeală.
SHA-Cod pot fi obținute de către uita la webVersion de git tabloul de bord pentru ultima comite pe ramura.
În acest fel puteți obține sincronizate cu ultimul comite pe ramura.
Puteți face git pull
după ce ați finalizat cu succes hard reset pentru a confirma nimic nou pentru syn exemplu, veți obține pentru a vedea mesajul.
Filiala este la curent cu Originea/<Nume de Ramură>`