Într-una din dezvoltarea mea ramuri, mi-am făcut niște modificări la codebase. Înainte am fost în măsură să finalizeze caracteristici lucram, am avut pentru a comuta curent ramură de master la demo unele caracteristici. Dar folosind doar un "git checkout maestrul" conservate modificările le-am făcut, de asemenea, în ramura de dezvoltare, de rupere astfel o parte din funcționalitatea în maestru. Deci ce am făcut a fost să se angajeze modificările pe ramura de dezvoltare cu o comite mesaj "temporar comite" și apoi checkout master pentru demo.
Acum, că m-am'm a facut cu demo-ul și înapoi la locul de muncă pe ramură de dezvoltare, aș dori pentru a elimina "temporar comite" care am făcut-o în timp ce încă păstrând modificările le-am făcut. Este posibil?
L's la fel de simplu ca acest lucru:
git reset HEAD^
git reset
fără --hard " sau "- moale
mută " ȘEF " la punctul specificat comite, fără a schimba orice fișiere. CAPUL^` se referă la (prima) părinte comite de curent comite, care în cazul tău este comis înainte de cel temporar.
Rețineți că o altă opțiune este de a desfășura în mod normal, și apoi la următorul punct de comite în loc de a alerga:
git commit --amend [-m … etc]
care va avea loc edit cele mai recente comite, având același efect ca mai sus.
Rețineți că acest lucru (ca aproape de fiecare git răspuns) pot cauza probleme daca'am amânat deja de rău se angajeze la un loc în cazul în care altcineva ar putea fi tras la. Încercați să evitați ca
Există două moduri de a rezolva asta. Care este mai ușor depinde de situația dumneavoastră
Reset
Dacă comite vrei să scapi de ultima comis-o, și nu ați făcut nici o muncă suplimentară puteți folosi pur și simplu git-reset
git reset HEAD^
Ia ramura a comite chiar înainte de actualul ȘEF. Cu toate acestea, nu't de fapt modifica fișierele de lucru în dumneavoastră copac. Ca urmare, modificările care au fost în care se angajează apare ca modificat - sale, ca un 'uncommit' comandă. De fapt, am un alias pentru a face doar asta.
git config --global alias.uncommit 'reset HEAD^'
Apoi, puteți doar folosit git uncommit
în viitor să susțină o comite.
Strivești
Strivești o comite înseamnă combinarea a două sau mai multe se angajează într-o singură. Eu fac asta destul de des. În cazul tău ai făcut caracteristică a comis, și atunci s-ar termina și s-o comită din nou cu buna, permanent comite mesaj.
git rebase -i <ref>
În fața fiecărui comis-o, va trebui cuvântul "alege". Găsi comite doriți să scapi de și de a schimba de la ia " la "remediere" sau " suc de fructe
. Folosind o remediere
pur și simplu aruncate înapoi în mare care se angajează mesaj și îmbină modificări în predecesorul său imediat în listă. La "suc de fructe" de cuvinte cheie face același lucru, dar vă permite să editați comite mesaj din nou combinate a comis-o.
Rețineți că se angajează va fi re-angajat în ordinea în care au apărut pe listă atunci când ieși din editor. Deci, dacă ați făcut o temporară a comis-o, apoi a făcut alte lucrări pe aceeași ramură, și a finalizat caracteristică într-un târziu comite, apoi folosind rebazare-ar permite să re-sorta angajează și a le strivi.
AVERTISMENT:
Rebasing modifică istorie - nu face asta la orice comite aveți deja partajate cu alți dezvoltatori.
Ascuns
În viitor, pentru a evita această problemă, luați în considerare utilizarea `git rezerva pentru a stoca temporar neangajate muncă.
git stash save 'some message'
Acest lucru va stoca modificările actuale de pe partea din rezerva ta lista. De mai sus este cel mai explicit versiune de marfa de comandă, care permit un comentariu pentru a descrie ceea ce ești ascuns. De asemenea, puteți rula pur și simplu `git de rezerva si nimic altceva, dar nici un mesaj nu vor fi stocate.
Puteți naviga stash dvs. lista cu...
git stash list
Acest lucru vă va arăta toate marfa, ce ramuri au terminat pe, și mesajul și la fiecare început de linie, și de identificare pentru marfa care arata ca aceasta rezerva lui@{#}` unde # este poziția în matrice de ascunzători.
Pentru a restabili un depozit (care se poate face pe orice ramură, indiferent de locul în care marfa a fost creat inițial) pur și simplu a alerga...
git stash apply stash@{#}
Din nou, nu # este poziția în matrice de ascunzători. Dacă marfa pe care doriți să restaurați este în poziția " 0 " - care este, dacă ar fi fost mai recente marfa. Apoi, puteți rula comanda fără a preciza marfa poziție, git va crede ca te referi la ultima: git marfa aplica
.
Astfel, de exemplu, dacă mă găsesc de lucru pe altă ramură - am dreptul să executați următoarea secvență de comenzi.
git stash
git checkout <correct_branch>
git stash apply
In cazul tau te-ai mutat în jurul valorii de ramuri un pic mai mult, dar aceeași idee se aplică în continuare.
Sper că acest lucru vă ajută.
Cred că sunteți în căutarea pentru asta
git reset-moale CAPUL~1
Se anulează cea mai recentă comite în timp ce păstrarea modificările aduse în care se angajează să intermediere.
Da, puteți șterge comite fără ștergerea modificări: git reset @~
Pentru cei care folosesc zsh, ai'll trebuie să folosească următoarele:
git reset-moale CAP\^
A explicat aici: https://github.com/robbyrussell/oh-my-zsh/issues/449
În cazul în care URL-ul devine mort, cel mai important este:
Evacuare ^ in comanda ta
puteți alternativ, puteți utiliza CAPUL~, astfel încât tu nu't trebuie să scape de fiecare dată.
În cazul meu, deja mi-am împins la repo. Ouch!
Puteți reveni un anumit comite păstrând în același timp modificările în fișierele locale de a face:
git revert -n <sha>
Acest modul a fost capabil să mențină schimbările care am nevoie și desfăcu o comit care au fost deja împinse.
Te're în căutarea pentru fie git reset CAP^ --moale " sau " git reset CAP^ --amestecat
.
Există 3 moduri de a comanda reset după cum se menționează în documente:
git reset CAP^ --moale
anula git commit
. Schimbări încă mai există în arborele de lucru(dosarul de proiect) + indicele (--cache)
git reset CAP^ --amestecat
undo git commit
+ git add
. Schimbări încă mai există în arborele de lucru
git reset CAP^ --hard
Cum n-ai mai făcut aceste modificări pentru a codebase. Modificările sunt plecat din arborele de lucru.
Folosind git 2.9 (tocmai 2.9.2.windows.1)
git reset CAP^
solicită mai mult; nu sunt sigur ce este de așteptat de intrare aici. Vă rugăm să consultați imaginea de mai jos
Găsit altă soluție git reset CAP~#numberOfCommits
cu care putem alege pentru a selecta numărul de locale se angajează doriți să resetați prin păstrarea modificările intact. Prin urmare, vom obține o oportunitate de a arunca toate locale se angajează, precum și ca număr limitat de locale se angajează.
Consultați mai jos capturi de ecran arată git reset CAP~1
în acțiune:
O modalitate de a face asta.
Adaugă comite pe partea de sus a temporară a comis-o și apoi face:
git rebase -i
Pentru a fuziona cele două se angajează într-un singur (comandă va deschide fișier text cu instrucțiuni clare, editați-l).