Autor | Zpráva | ||
---|---|---|---|
Taps Profil |
#1 · Zasláno: 23. 5. 2013, 07:03:23
Zdravím, začínám s gitem. Změny v souborech jsem commitnul a poté pushnul, ale zjistil jsem že pushnutí jsem provedl do špatného umístění. Je možné pushnutí (commity) vrátit zpět ? Případně poslední kroky (commit a push) zcela resetovat.
Děkuji |
||
Sir Tom Profil |
#2 · Zasláno: 23. 5. 2013, 08:05:43
Taps:
Také zdravím, vytvoř si nový repozitář, do kterého naklonuješ data z tohoto špatného umístění a tento svůj repozitář pushni do správného umístění. Commit & push by zpět nedával - je to proti logice verzovacího systému. Můžeš se ale pochopitelně vrátit do jakéhokoliv předchozího commitu. |
||
Taps Profil |
#3 · Zasláno: 23. 5. 2013, 12:33:10
Sir Tom:
Díky za tip, bylo by možné aby jsi mi napsal konkrétní příkazy ? Ty jsi určitě více zkušenější |
||
Jan Tvrdík Profil |
#4 · Zasláno: 23. 5. 2013, 12:48:47
Taps:
„zjistil jsem že pushnutí jsem provedl do špatného umístění“ Jako že se ti omylem pushnul do jiného vzdáleného repozitáře? Např. poslední tři pushnuté commity můžeš zrušit příkazem git push origin HEAD~3:master --force |
||
Sir Tom Profil |
Taps:
Nevím, zda-li jsem pochopil přesně situaci, ale řekněme, že máš 2 projekty (pA, pB) a každý má svůj git repozitář (rA, rB). Předpokládejme, že data projektu A jsou i na repozitáři A - stejně jako projekt B je i na repozitáři B. Nějakým stylem se ti povedlo pushnout commity pA do rB. Tím pádem už rB != pB, ale pA = rB (popř. = rA). Je toto nynější stav? Jestli ano, tak si můžeš stáhnout rB a přejít do commitu, který byl před stavem nahráním pA do rB. Snad jsem to nenapsal moc komplikovaně... Řešení Jan Tvrdík je také dobré, nicméně mně se nelíbí ono "rušení commitů". Co když náhodou zruším něco, co je potřeba? Jan Tvrdík „Pushni do vzdáleného repositáře, který se jmenuje origin, do větve, která se jmenuje master, před-před-před-poslední commit a zcela ignoruj to, co už momentálně v tom vzdáleném repositáři je.“ Asi off-topic, ale ty 3 commity se počítají jen mé commity, nebo i ostatních uživatelů? (Ptám se, protože takto můžu "zrušit" práci jiného uživatele (resp. ne jeho práci, ale jeho commit)). |
||
juriad Profil |
#6 · Zasláno: 24. 5. 2013, 09:34:00
Sir Tom:
Přečti si o tom, jak v gitu fungují větve. Jedná se jen o ukazatele na nějaký commit. Nic se neruší, všechno v gitu zůstává; git reset jen posune ten ukazatel na jiný commit; to že následující commity budou uživatelsky nepřístupné, to je jiná otázka. Pokud v HEAD vytvoříš novou větev a následně svoji resetneš 3 commity dozadu, tak ty tři comity pořádku budou přístupné přes druhou větev. Seznam všech nedávných lokací, můžeš zjistit pomocí git reflog a tedy můžeš obnovit libovolný stav. |
||
Jan Tvrdík Profil |
#7 · Zasláno: 24. 5. 2013, 11:28:53
Sir Tom:
„ale ty 3 commity se počítají jen mé commity, nebo i ostatních uživatelů?“ Git nedělá rozdíly mezi tím, kdo commity tvoří. „Co když náhodou zruším něco, co je potřeba?“ Proto máš na krku hlavu, abys dával pozor, co zrušíš. juriad: „Nic se neruší, všechno v gitu zůstává“ Tak to pozor, tohle není úplně pravda. Git obsahuje garbage collector, který nepřístupné commity časem definitivně smaže. Nesprávné použití přepínače --force můžu skutečně v krajním případě vést ke ztrátě dat.
|
||
Sir Tom Profil |
#8 · Zasláno: 24. 5. 2013, 20:17:25
juriad:
Samozřejmě, že přes větve to lze vyřešit. V tomto případě by větev sloužila de facto jako "záloha" a nikoliv jako "vývoj". Jan Tvrdík: „Proto máš na krku hlavu, abys dával pozor, co zrušíš.“ Ach ta moje hlava. :) Myslel jsem to tak, verzovací systém by už sám ze své logiky zajišťovat, aby se projekt nikdy nedostal do takového stavu, kde by byla navždy a nenávratně ztracená data. |
||
Amunak Profil |
#9 · Zasláno: 24. 5. 2013, 21:47:01
Sir Tom:
To on ale zajišťuje, akorát dává pokročilým uživatelům i možnosti jak to překonat, když je třeba. |
||
Časová prodleva: 11 let
|
0