2016-09-29 12 views
11

Wpadam na problem z git push. Udało się to wcześniej, ale tym razem się nie udało. Na początku, jestem w moim mistrzem MINGW64 /d/javasoft/apache-tomcat-7.0.70/webapps/MyNote (master) , a następnie"odmowa scalenia niepowiązanych historii" podczas pobierania do odzyskanego repozytorium

  • używam git remote add origin odnosić moje pochodzenie romote, ale ostrzega, że ​​fatal: remote origin already exists.
  • następnie używam git remote rm origin (Ktoś powiedział mi) , w porządku.
  • następnie ponownie używam git remote add origin https://github.com/***/***.git. W porządku.
  • następnie używam git push -u origin master (próbowałem git push origin master, ale zgubiłem lokalnej całość .git z jakiegoś powodu wcześniej, więc myślę, że może to być po raz pierwszy do pchania, a należy dodać, -u). ALE, powiadamia error: failed to push some refs to 'https://github.com/***/***.git'
  • , wtedy ktoś powiedział mi, że powinienem użyć git pull origin master zanim użyję push, i zrobiłem jak to. ALE, to zaalarmowało: fatal: refusing to merge unrelated histories.
  • Znalazłem kilka odpowiedzi w Git refusing to merge unrelated histories, ale wydawało się, że to nie działa. W moim wydaniu, to zaalarmował fatal: Couldn't find remote ref –allow-unrelated-histories

naprawdę nie wiem jak to zrobić ... po prostu chcą wcisnąć ..

+0

Czy ustaliłeś, dlaczego historie się rozdzieliły? Musisz dowiedzieć się, czy lokalny i zdalny/początek wyprzedzają się wzajemnie, a jeśli tak, zdecyduj, czy chcesz się scalić, czy też wzmocnić. – javabrett

+0

"Zgubiłem moją lokalną całość .git z jakiegoś powodu wcześniej". Więc zacząłeś nową historię z samym kodem? To może wyjaśnić, co widzisz. – max630

+0

Zasadniczo, zdecydowanie nie powinieneś ** używać w swojej sprawie flagi '-ilej-niepowiązanej-historii". Zamiast tego powinieneś przywrócić historię swojego kodu tak, aby ostatnie zatwierdzenie z historii pochodzenia, którą posiadasz w swoim kodzie, było jego rodzicem, a następnie scalenie powinno dać prawidłowy wynik. – max630

Odpowiedz

49

To nie jest możliwe wkrótce.

Warning: Ty nie powinno użyć flagi –allow-unrelated-histories chyba wiesz, co jest niezwiązane Historia i są na pewno potrzebne. Czek został wprowadzony tylko po to, aby zapobiec katastrofom, gdy przez pomyłkę połączymy niepowiązane projekty.

O ile mi zrozumieć, w przypadku działo się następujące:

Masz sklonowany projekt w pewnym momencie 1 i osiągnęła pewien rozwój wskazać 2. Tymczasem projekt ewoluował do pewnego stopnia 3.

enter image description here

Następnie z jakiegoś powodu stracił swoją lokalną .git podkatalogu - który zawierał całą historię od 1 do 2. Udało ci się jednak przywrócić bieżący stan.

enter image description here

Ale teraz nie ma żadnej historii - wygląda na to, że cały projekt pojawił się znikąd. Jeśli poprosisz gita, aby je scalił, nie będzie mógł powiedzieć, gdzie są twoje zmiany, więc może dodać je do zdalnego projektu, o ile rozumiem, zgłosi tylko masowe konflikty dodawania/dodawania.

Co należy zrobić teraz jest znaleźć z powrotem że popełnić 1 z odległej historii, gdzie masz sklonowanego projektu (zakładam, że nie ciągnąć potem, jeśli nie to należy zamiast szukać ostatniego zatwierdzenia ciągnąłeś). Następnie powinieneś zmodyfikować swoją historię tak, aby zaczynała się od tego zatwierdzenia 1, wtedy git będzie mógł poprawnie się scalić (np. Z ciągnięciem).

Więc, etapy (zakładając, że są teraz w przywróconego popełnić bez historii):

  • oszacowanie gdzie jest popełnić 1 zostały sklonowane z jak jakiś 1?, na podstawie popełnić czasu np
  • uruchom git diff _1?_..HEAD i przeczytaj uważnie, upewnij się, że różnica zawiera tylko wprowadzone przez Ciebie zmiany. Jeśli zawiera więcej niż powinieneś wybrali nieco źle 1? i trzeba dostosować go i powtórz ten krok
  • po znalezieniu popełnienia 1, należy zrobić to rodzic, czy git --reset --soft _1_, następnie git commit.

enter image description here

Teraz wygląda na to, że sklonowany z 1, a następnie popełnił jeden popełnić ze wszystkimi zmianami. Twoja pośrednia historia i tak przegrywa ze starszym katalogiem .git, ale teraz możesz uruchomić swój git pull - będzie on poprawnie scalony.

+2

Znalazłem konieczność użycia flagi podczas importowania istniejącego repozytorium do nowo utworzonego repozytorium w Github. – Rabiees

-3

usiłujące dokonać zmian w lokalnym repo. przed wrzuceniem ich na GITHUB. Może rozwiązać problem (miałem podobny problem).

+1

Ponieważ SO chce, żebym wyjaśnił moje -1 - "to jest całkowicie błędne". – dfarrell07