Vreau să renunțați la toate modificările efectuate după angaja` . Așa am făcut:
git reset --hard <commit-hash>
Acum vreau să fac același lucru cu telecomanda mea. Cum pot face asta? Am făcut unele se angajează (și împinge) după <a comis-hash>
și vreau doar să aruncați-le pe toate. Este doar ceva de mers teribil greșit în drum și eu nu't doriți să-l facă mai rău decât este deja. ;(
Eu practic vreau sa derulez origine/maestru " la " <a comis-hash>
Presupunând că filiala este numit "maestru" atât aici, cât și de la distanță, și că de la distanță este numit "origine" ai putea face:
git reset --hard <commit-hash>
git push -f origin master
Cu toate acestea, ar trebui să evite a face acest lucru dacă cineva este de lucru cu depozit la distanță și a făcut modificări. În acest caz, ar fi mai bine să revenire angajează că nu't doriți, apoi apăsați în mod normal.
Actualizare: tu'am explicat mai jos ca alte persoane au tras modificările pe care le'am împins, așa că's mai bine pentru a crea un nou comite că revine toate aceste modificări. Nu's o frumoasă explicație de opțiuni pentru a face acest lucru în acest răspuns de la Jakub Narębski. Care este cel mai convenabil depinde de cât de multe se angajează doriți să reveniți, și care metodă face mai mult sens pentru tine.
Deoarece la intrebarea ta l'e clar că ați folosit deja git reset greu
pentru a reseta "maestru" sucursală, ați putea avea nevoie pentru a începe prin utilizarea git reset ... e greu ORIG_HEAD
pentru a muta dvs. de ramură înapoi de unde a fost înainte. (Ca întotdeauna cu git reset ... e greu
, asigurați-vă că git status
este curat, că te're pe ramura dreaptă și că te're conștienți de git reflog
ca un instrument pentru a recupera pierdut aparent comite.) Tu ar trebui să verificați, de asemenea, că ORIG_HEAD
puncte pentru dreptul de a comite, cu git show ORIG_HEAD
.
Depanare:
Dacă primiți un mesaj de genul "! [remote respins] a60f7d85 -> master (pre-primiți cârlig scăzut)"
apoi trebuie să permită ramură rescrierea istoriei pentru o anumită ramură. În BitBucket de exemplu, ea a spus "Rescrierea ramură istoria nu este permis". Există o casetă de selectare numit `Permite rescrierea ramură istorie care va trebui să verificați.
Utilizați alte răspunsuri, dacă nu't pierde mintea modificări locale. Această metodă poate încă epava de la distanță dacă alegeți greșit comite hash pentru a merge înapoi.
Dacă doriți doar pentru a face de la distanță un meci comis's deja în filiala locală:
pentru a găsi hash a comite vrei de la distanță pentru a fi la.
git log-ppentru a vedea modificările, sau
git log --grafic --toate --oneline --decora` pentru a vedea un arbore compact. (Având ca ultimul ca un alias în shell-ul este foarte la îndemână.)git push --force <de la distanță>
de exemplu
git push --force origine 606fdfaa33af1844c86f4267a136d4666e576cdc:master
Pe GitLab, trebuie să setați ramură a neprotejat înainte de a face acest lucru. Puteți face acest lucru în [repo] > Setări > Depozit > Protejat Ramuri. Apoi metoda de la Mark's a răspunde funcționează.
git reset --hard <commit-hash>
git push -f origin master
Dacă doriți o versiune anterioară a fișierului, mi-ar recomanda folosind git checkout.
git checkout <commit-hash>
Făcând acest lucru vă va trimite înapoi în timp, aceasta nu afectează starea actuală a proiectului, puteți veni la magistrala git checkout magistrala
dar atunci când adăugați un fișier în argument, că fișierul este adus înapoi la tine de la un timp anterior pentru proiectul curent de timp, și anume proiectul curent este schimbat și trebuie să fie angajat.
git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git push
Avantajul este că nu se șterge istoria, și nici nu reveni un anumit modificări de cod (git reveni)
Verifica mai multe aici https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout
Cei doi cenți ai mei la răspunsurile anterioare: dacă
git push --force <remote> <the-hash>:<the remote branch>
încă nu't de lucru, ați putea dori pentru a edita `<ta-de la distanță-repo>.git/config file's primi secțiune:
[receive]
#denyNonFastforwards = true
denyNonFastforwards = false
Dacă filiala nu este de dezvoltare sau de producție, cel mai simplu mod de a realiza acest lucru este resetarea la un anumit comit la nivel local și de a crea o nouă ramură de acolo. Puteți folosi:
git checkout 000000
(în cazul în care 000000 este comis id-ul acolo unde vrei sa mergi) în problematică de ramură și apoi pur și simplu a crea o nouă ramură:
git remote add [name_of_your_remote]
Apoi, puteți crea un nou PR și totul va funcționa bine!
Face un singur lucru, obține comis's SHA nr. cum ar fi 87c9808 și apoi,
eroare: nu a reușit să împingă unii arbitrii să 'https://github.com/YOURREPOSITORY/AndroidExperiments.git' sugestie: Actualizări au fost respinse pentru că vârful de curent ramură este în spatele sugestie: sa omologul său de la distanță. Integrarea telecomandă schimbă (de exemplu, sugestie: 'git pull ...') înainte de a împinge din nou.**
`git push --force origine master