git, svn, mercurial

Marius '95

troubleShooter
Git:
Am facut git clone la ceva de pe github. Mi-am salvat propriile modificari intr-un branch nou, local. Master-ul de pe github are acum update-uri. Cum fac sa incorporez update-urile alea in branch-ul meu?

Multumesc.
 
Cred că tre să faci un git pull pentru a aduce master-ul la zi și apoi git merge ca să merge-uiești branch-ul tău în master (și să speri că nu apar conflicte :smile:).
 
OK, am facut pull deja. Dar nu prea vreau sa amestec branch-ul meu cu master-ul. Ma uitam la git rebase. Nu-i mai bun asta?

In orice caz, am conflicte. Imi spune care-s fisierele, dar nu stiu cum ar trebui sa analizez diferentele. E vorba de un fisier changelog pe care eu nu-mi amintesc sa-l fi modificat.
Am incercat git diff <fisier> dar nu m-am lamurit. Nu scrie care varianta este cea locala si care-i cea din master, presupunand ca git diff dupa un rebase neterminat chiar asta arata, nu total alteceva.
 
Nu prea am folosit git, dar din cum înțeleg io că funcționează, un workflow comun ar fi ceva de genul: faci clone la repo, faci checkout într-un branch local, faci modificările în branch-ul tău local, iar când ai terminat faci merge înapoi în master-ul tău local. Apoi, dacă vrei poți să faci push înapoi către sursă.

Dacă în timp ce tu faci modificări în branch-ul tău, master-ul remote se schimbă, cred că e recomandat să îți sincronizezi master-ul local cu cel remote (via pull sau fetch?) înainte să faci merge.

Poate ar trebui să explici mai clar ce vrei să obții exact.
 
Faci rebase, dar nu înseamnă că n-o să ai probleme (conflicte). Dar dacă ai conflicte cu fișiere pe care tu zici că nu le-ai modificat, vezi istoricul tău vs istoricul lor. Poate ai bușit setări de autocrlf și ai modificat toate fișierele.

Ia un tool vizual, că e mai simplu de văzut ce-i acolo decât cu linia de comandă - vezi tree-ul vizual, vezi tot logul, vezi ce fișiere ai modificat etc.
 
Am facut un rebase. Doua fisiere modificate. Am facut checkout la fisierele din master, apoi git add la cele doua si git rebase --continue. Apoi m-am pierdut. Imi zice ca sunt cu 4 commit-uri inaintea master-ului !?

Care tool vizual e ala? (PS: am un gentoo *foarte* personalizat)
 
'git log' ar trebui să te lămurească mai bine decât noi care îs alea 4 commits.
 
Fac un rebase. Branch-ul origin/master peste branch-ul meu local marius95.
Am conflicte. Unul dintre ele este un fisier modificat in marius95 de nenumarate ori, acum modificat si in master. Cand fac rebase se opreste la primul commit din marius95, adica ceva f. f. vechi. Banuiesc ca vrea sa aplice toate modificarile din marius95 secvential. Dar sunt o gramada!
Cum fac sa nu trec prin toate commit-urile pe fisierul respectiv?
 
Se dau doua surse pe github, A = original si B = derivata din A, precum si clona mea locala (C) derivata din B.
A s-a actualizat de mai multe ori. B nu; posibil sa fie abandonat.
Vreau sa actualizez C cu ultimele modicari din A. Cum fac asta usor?
Sau cum fac sa renunt de tot la B si sa "leg" C direct de A, pastrand ultimele modificari din B.
 
Schimbi remote-ul la A și pull; preferabil faci un branch separat pentru starea ta curentă și rebase pe master după ce ai făcut pull.
 
S-a blocat calculatorul in timpul unui build. Dupa reset am gasit numeroase erori pe hard. Le-a auto-corectat. Am verificat git-ul cu git fsck si totul e in regula, dar cum verific fisierele "checked out"? De fapt, cel mai mult mi-ar place sa fac un checkout care sa-mi suprascrie fisierele deja existente, dar sa nu stearga fisierele noi care nu-s in git.
Deci cum fac?
 
Păi dacă git se prinde că-s modificate ar trebui să fie în git status
Dacă nu crezi că s-a prins, și vrei să te asiguri:

git add . (aici ar trebui să-ți pui fișierele tale)
git stash
git reset --hard
git stash apply

Filozofia git e să-ți faci un branch în care să îți ții (în git) "fișierele noi care nu-s în git" :smile:
 
Eh... filozofia e una, practica e alta. Am .config-ul de la build salvat, dar mai sunt si alte fisiere si nu le stiu pe toate.
Momentan dau un "make dirclean" si un "make" sa vad ce iese.

Alta idee: daca mut fisierele in alt director (fara .git), dau "git reset --hard" si apoi mut inapoi fisierele vechi fara sa le suprascriu pe cele nou scoase din git?
 
Eh, atunci practica e simplă: dă-le naibii de fișiere, oricum nu erau importante, le scrii iar. Presupun că nici git remote nu ai, pentru că git e doar o complicație pentru că e folosit de alții.

Da, se poate și asta cu mutatul fisierelor.
 
Ma chinui sa fac un pull request pe github. L-am facut. Mi-au fost raportate niste probleme. Pot sa-l modifc sau trebuie anulat si facut altul?

Am incercat:
- modificat fisierele local
- git add, git commit
- git rebase origin/master cu fixup la ultimul commit
- git push <--eroare ca head-ul nu corespunde si ca trebuie intai un git pull, dar git pull nu merge ca nu-stiu-ce nu corespunde:
"Your configuration specifies to merge with the ref ... from the remote, but no such ref was fetched."

Help? Ca nu vreau sa sterg iar tot ce am pe hard si s-o iau de la capat cu git clone.
 
Back
Top