2011-08-28 10 views
7

Niedawno otworzyłem repozytorium na GitHub. Jestem nowy w Git. Jak zwykle z nowoprzybyłymi, popełniłem przy użyciu domyślnej nazwy i adresu e-mail, który w najlepszej tradycji noobu odkrył pięć zobowiązań zbyt późno. Teraz zaczyna się zabawa, ponieważ zacząłem szukać informacji o tym, jak zmienić nazwisko autora tych zatwierdzeń. W porządku. I w zasadzie znaleźć następujące informacje i wiele kopii:Zmień nazwisko autora poprzednich zatwierdzeń: Przesunięcia do przodu odrzucone

  1. http://help.github.com/change-author-info/

  2. Delete commits from a branch in Git

  3. How to remove selected commit log entries from a Git repository while keeping their changes?

  4. Change the author and committer name and e-mail of multiple commits in Git

  5. Change commit author at one specific commit

  6. Change first commit of project with Git?

  7. Could I change my name and surname in all previous commits?

Problem nie wydaje się być niczym niezwykłym. Mogę tylko powiedzieć, że żadne z rozwiązań nie zadziałało. Połowa z nich to odmiany tego samego skryptu git filter-branch -f --env-filter. Próbowałem pracować nad tym skryptem wiele razy. Problem polega na tym, że po zastosowaniu skryptu nie mogę naciskać. "Przesunięcia do przodu odrzucone" lub coś w tym stylu. W porządku, jedynym sposobem na kontynuowanie jest ciągnięcie. Po wyciągnięciu wszystkie stare informacje są znów dostępne + nowy oddział z nowymi informacjami. Już siedzę tutaj z czterema gałęziami, połączonymi w najbardziej nieokrzesany sposób, wszystkie zawierają te same informacje z różnymi nazwiskami autorów, w tym ten, który chciałem usunąć.

OK, aby go krótko skrócić, próbowałem również usunąć wybrane zatwierdzenia, które wywołują konflikty wywołujące włosy, których nie jestem w stanie rozwiązać (jak?), I zmiażdżyć niektóre z nich na nowsze z poprawnymi informacje o autorze, co powoduje, że obecny stan projektu ulega zniszczeniu. Co więcej, pojawia się błąd segmentacji czasami po wykonaniu git rebase -i, o którym jestem tutaj poinformowany: http://lists-archives.org/git/729800-rebase-i-segmentation-fault-and-another-problem.html jest całkowicie logiczny. Jedyną rzeczą, która działa (na szczęście), jest git rebase --abort, która kilkakrotnie uratowała mi tyłek.

Mam nadzieję, że moja frustracja nie odstraszy, ale zamiast tego zabawi cię i pobudzi do pomocy. Chciałbym:

  • Aby usunąć powiedział informacji autor wreszcie

  • Bonus: Aby pozbyć się wszystkich gałęziach zawierających te same informacje.

Ale byłbym zadowolony z pierwszego też, jeśli przeszkoda usuwać przeszłości oddziały bez burzenie obecnego stanu jest zbyt dużo dla początkującego git. Z góry dziękuję.

+0

duplikat [Co to jest „do przodu” w Git? ] (http://stackoverflow.com/questions/4684352/whats-a-fast-forward-in-git) –

+0

Jak to jest duplikatem? To, że odpowiedź na pytanie jest pod pewnymi względami pokrewne, nie oznacza, że ​​pytanie jest takie samo, ale odmiennie sformułowane. – Hinton

+0

Uważam to za duplikat. Rozwiązania są zasadniczo identyczne, tzn. Wymuszają nacisk, ale wydaje się, że był to jedyny problem po pomyślnym przepisaniu historii. Jeśli ktoś się z tym nie zgodzi, nie może po prostu ponownie otworzyć twojego pytania. –

Odpowiedz

5

Problem polega na tym, że po zastosowaniu skryptu nie mogę naciskać. "Przesunięcia do przodu odrzucone" lub coś w tym stylu.

Tego problemu nie można uniknąć, jeśli próbujesz zmodyfikować historię.Git odrzuca nacisk, ponieważ powoduje utratę danych; w tym przypadku dane są starymi autorami. Po prostu musisz git push z flagą --force, aby powiedzieć, że jesteś pewny, co robisz.

Obsługa w Git może być trudna do rozwiązania. Jeśli master jest bałaganem, zwykle cofam się do historii z git checkout HEAD~, dopóki nie powrócę do czasu, kiedy wszystko nie będzie straszne. I następnie git branch --force master, aby zresetować master do tego punktu. Na koniec usuwam wszystkie niechlujne gałęzie z git branch -D badBranch.

Uważaj.

+0

OK - to działało tak daleko, jak ostatecznie usunięto nazwisko autora. Czy może masz również wskazówkę, jak usunąć wszystkie gałęzie, które przypadkowo stworzyłem? – Hinton

+0

Pamiętaj też, aby powiedzieć wszystkim, czego potrzebują, aby "odświeżyć" repozytorium. – Andy

+0

@Ai to jest "quasi-prywatne" ponowne wywołanie (co oznacza, że ​​jestem jedynym uczestnikiem ^^) ... I tak bym tego nie zrobił w innym przypadku. – Hinton

1

Jeśli jeszcze nikt nie śledzi repozytorium, po prostu zmień swoje lokalne repozytorium i wymuś push na GitHub. Zaakceptuj wszelkie zażenowanie. Byłem (re) budowania repo od tygodni w podobnym stylu.

To bardziej skomplikowane, jeśli jest to projekt studentów i wykładowca już wyciągnął go - tak, aby można docenić wartość dobrego administratora ;-)

Powiązane problemy