2013-06-28 13 views
14

W moim projekcie dokonałem dużego refaktoryzacji: zmieniłem nazwę plików, usunąłem, dodałem ... Poza tym dodałem kilka folderów w .gitignore. Jednak już przed refaktoryzacją dokonałem zatwierdzenia do zdalnego repozytorium.Droga do "reinit" repozytorium

Czy są jakieś rzeczy do zrobienia "reinit" dla mojego repozytorium? Jeśli nie, co powinienem zrobić?

Aktualizacja:

I została usunięta .git folderu i teraz mam błąd

podpowiedź: Aktualizacje zostały odrzucone, ponieważ końcówka bieżącego oddziału jest za podpowiedź: jego zdalne odpowiednik. Scal zdalne zmiany (np. "Git pull") wskazówka: przed ponownym naciśnięciem. podpowiedź: zobacz "Notatka na temat fast-forwardów" w "git push --help", by poznać szczegóły.

Nie chcę scalać lokalnych zmian z repozytorium zdalnego, chcę tylko popchnąć tam, co oznacza całkowicie zastąpić repozytorium zdalnego lokalnym lokalnym.

+0

Chcesz mieć czyste historii, "reinit"? Dlaczego po prostu nie posuniesz się naprzód i nie popełnisz nowych zmian? – Mingyu

+0

@Mingyu, zrobiłem tylko jedno zatwierdzenie, więc posiadanie czystego repozytorium to dobry pomysł. –

+0

Jaka jest natura zdalnego repo? Jeśli nie ma żadnych aktywnych klonów, po prostu go zastąp. – tripleee

Odpowiedz

5

UPDATE

Jeśli usunięto folder .git (nie świetny pomysł), można utworzyć nowy klon repo i przenieść swoje rzeczy do tego, i nadal istnieje. Coś podobnego to

cd .. 
git clone <remote-repo-url> new-repo 
rm -rf new-repo/*       // this will not remove new-repo/.git 
cp -f <original-local-repo> new-repo 
cd new-repo 

Następnie kontynuuj jak poniżej.

Należy pamiętać, że lepiej jest przywrócić folder .git. Utworzenie nowego repo spowoduje utratę wszystkich lokalnych informacji o repo, które posiadałeś w pierwotnym lokalnym repozycie, takich jak lokalne oddziały, które nigdy nie były wypychane.

END UPDATE

Mogłeś

git reset --soft HEAD^ 
git add -A . 
git commit -m "rewriting history" 
git push --force origin master 

To będzie powrót do poprzedniego commit (zachowując drzewo pracy i indeks), swoje zmiany, a następnie wymusić Push że przepisany historii do pilota.

push --force to niebezpieczne rzeczy. Będzie to przeszkadzać innym, którzy już pociągnęli, i jest uważane za bardzo niegrzeczne, ale jeśli nikt inny nie rozpoczął pracy nad nim, nie stanowi to problemu.

To, co się dzieje:

--- A -- B master 

    ^
    |  
    origin/master 

git push 

--- A -- B master, origin/master 

git reset HEAD^ 
git commit -am "rewriting" 

--- A -- B origin/master 
    \ 
     \ 
     B' master 

git push --force 

--- A -- B 
    \ 
     \ 
     B' master, origin/master 
+0

Czy to działa? Myślałem, że git został zaprojektowany, aby nie akceptować zdalnych zatwierdzeń, które usuwają historię. Czy to właśnie - siła robi? – Paul

+0

Możesz przepisywać historię przez cały dzień, ale zmienią się wartości mieszania Twoich zatwierdzeń. Nie możesz zmienić zawartości zatwierdzenia, ale możesz go zmienić, tworząc nowe zatwierdzenie sortów, i możesz ponownie zdefiniować, do czego wskazuje twój "master". – tadman

3

Leniwe sposobem jest po prostu dodać wszystkie nowe pliki i zmian i skreśleń:

git add -A . 

Tak długo, jak nie ma żadnych konfliktów, co powinno łączyć w grzywny.

+0

Ale nie chcę usuwać tych plików z projektu. Cóż, chcę, aby niektóre z nich zostały trwale usunięte (z repo i dysku), ale dla reszty z nich chcę tylko, żeby nie były w indeksie git (żeby git ich nie widział - dla tych, które w .gitignore). Czy muszę usunąć wszystkie ręcznie przez "git rm ..."? –

+0

Wygląda na to, że to, co chce, to czysta historia ... – Mingyu

+0

Możesz tymczasowo przenieść te pliki z projektu, zatwierdzić "usunięcie", a następnie przenieść je z powrotem do miejsca, w którym będą ignorowane od tego momentu. Po przeniesieniu 'git add -A .' wyświetli te usunięcia. Po zatwierdzeniu, jeśli twoje '.gitignore' jest ustawione poprawnie, przeniesienie ich nie będzie miało wpływu na twoje repozytorium. – tadman

2

Oto kroki, aby ponownie startowy repozytorium.

Scenariusz: Usunąłem lokalnie folder projektu, który wcześniej wykonałem git init.Potem chciałbym zaktualizować do istniejącego repozytorium git z nowym folderem tego samego projektu. Następnie rozwiązałem go, postępując zgodnie z procedurą.

Procedura

git init 
git add --all 
git commit -am "re-init" 
git remote add origin https://github.com/{yourgit}/{yourproject}.git 
git push --force origin master 
Powiązane problemy