Arunca locale se angajează în Git

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:

  • untracked fișiere
  • nestaditizat modificări
  • organizat, dar neangajate modificări
Comentarii la întrebare (1)
Soluția

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.

Comentarii (11)

Pur și simplu ștergeți locale master ramură și recrea-l astfel:

git branch -D master
git checkout origin/master -b master
Comentarii (8)

Încercați:

git reset --hard 

pentru a reseta-ti capul unde vrei să fii. Utilizarea gitk pentru a vedea care comite vrei să fii. Poti face resetare din cadrul gitk la fel de bine.

Comentarii (2)

Șterge cele mai recente comite:

git reset --greu de CAP~1

Șterge cele mai recente comite, fără a distruge munca pe care'am făcut:

git reset-moale CAPUL~1

Comentarii (2)

Dacă utilizați Atlassian SourceTree app, ai putea folosi opțiunea de resetare din meniul contextual.

Comentarii (0)

Pe ramura de încercare:

git reset --hard origin/

Validarea inversare (la stat, cu nr locale se angajează), folosind "git log" sau "git status", prin urmare.

Comentarii (3)

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/, dar nu întotdeauna

Comentarii (3)

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.

Comentarii (3)

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.

Comentarii (0)

Pentru locale se angajează, care nu sunt împins, puteți utiliza, de asemenea, `git rebazare -am să ștergeți sau suc de fructe o comite.

Comentarii (2)

Elimina untracked fișiere (neangajate modificări locale)

git clean -df

Ștergerea permanentă locale se angajează și obține cele mai recente de la distanță comite

git reset --hard origin/
Comentarii (0)

Pentru cei interesați în Visual Studio soluție, aici e treaba:

  1. În Echipa Explorer fereastra, conectați-vă la țintă repo.
  2. Apoi, de la "Ramuri", faceți clic dreapta pe ramura de interes și selectați istoria.
  3. Faceți clic dreapta pe o comite în "Istoria" ferestrei și alegeți Resetare -> Șterge modificări (greu)`.

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.

Comentarii (0)

Î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

Mai întâi de toate ce este CAPUL?`

"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ă

Câteva opțiuni cu privire la modul de a recupera de la un CAP detașat:


git checkout

git checkout 
git checkout -b  
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 

# create a new branch forked to the given commit
git checkout -b 

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.
  • Notă: (Din Git 2.7) puteți folosi, de asemenea, `git rebazare ... nu-autostash, la fel de bine.

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  can be any commit(s) or commit range
git revert 

Această schemă ilustrează care comanda ce face. După cum puteți vedea acolo reset && checkout modifica CAP.

Comentarii (0)

Dacă aveți local repo într-un dezastru complet, apoi o modalitate sigură de a arunca locale se angajează în Git este de a...

  1. Utilizați "git config --a obține de la distanță.origine.url" pentru a obține URL-ul de la distanță origine
  2. Redenumiți locale git folder pentru a "my_broken_local_repo"
  3. Utilizați "git clona <url_from_1>" pentru a obține proaspete locale copia de la distanță git repository

Î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".

Comentarii (0)
git reset --hard 

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ă>`

Comentarii (0)

Dacă Filiala este înainte de 'origine/XXX' de 5 angajează.

Puteți problema: git reset --greu de CAP~5 Și ar trebui să elimina ultimele 5 angajează.

Comentarii (0)