2011-08-27 13 views
70

Jeśli chcesz przenieść zatwierdzenie do obszaru przemieszczania - nie jest to przyrzeczenie i przenieś wszystkie zmiany, które były w nim do obszaru przemieszczania (efektywnie umieszczając gałąź w stanie, w którym znajdowałaby się przed zatwierdzeniem) - jak ty to robisz? Czy jest to coś, czego nie możesz zrobić?Jak przenieść commit do obszaru pomostowego w git?

Najbliższe, co potrafię zrobić, to skopiować wszystkie pliki, które zostały zmienione w zatwierdzeniu, gdzie indziej, zresetować gałąź do zatwierdzenia przed zatwierdzeniem, które próbujesz przenieść do obszaru pomostowego, przenieś wszystkie skopiowane pliki z powrotem do repozytorium, a następnie dodaj je do obszaru przemieszczania. Działa, ale nie jest to dobre rozwiązanie. To, co chciałbym móc zrobić, to po prostu cofnąć zatwierdzenie i przenieść jego zmianę do obszaru przemieszczania. Czy można to zrobić? A jeśli tak, to w jaki sposób?

Odpowiedz

132
git reset --soft HEAD^ 

Spowoduje to zresetowanie indeksu do HEAD^(poprzednie zatwierdzenie), ale pozostaw zmiany w obszarze pomostowym.

Istnieje kilka poręcznych diagramów w git-reset docs

Jeśli w systemie Windows może być konieczne do korzystania z tego formatu:

git reset --soft HEAD~1 
+15

Jeśli to nic nie robi, spróbuj 'git zresetować --soft Head ~ 1' co oznacza to samo, ale działa również w systemie Windows. –

+5

Wyjaśnienie, tylda i carot oznaczają różne rzeczy w wersjach git. HEAD ~ 1 zawsze podąża za pierwszym rodzicem zatwierdzenia, które może nie być tym, co chcesz, jeśli jest to zatwierdzenie scalenia, które ma wielu rodziców. Jeśli chodzi o powłokę cmd Windows, po prostu trzeba uciec z karot z innym karotem np. "git reset --soft HEAD ^^", aby powrócić do "HEAD ^". Jest to wyłącznie artefakt powłoki Windows cmd, więc nie powinieneś tego robić, jeśli używasz GUI git w systemie Windows. Tilde i carot są wyjaśnione na http://schacon.github.io/git/git-rev-parse#_specifying_revisions – ahains