2013-09-03 10 views
31

Zwykle wystarczy uruchomićGit uniemożliwia pchanie po zmianie commit

git add file 
git commit 
git push 

ale jeśli zmiany commit przed popychając go (z git commit --amend), następne naciśnięcie kończy się niepowodzeniem z

hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Integrate the remote changes (e.g. 
hint: 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

Jak mogę zezwolić gitowi na wprowadzanie zmian bez łączenia oddziałów? Mam tylko jedną gałąź (master) i jestem jedyną osobą używającą tego repo, więc dlaczego to mówi?

git branch -a:

* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 

EDIT: Korzystanie gitk HEAD @{u}, widzę, że mam 2 oddziały, jeden z oryginałem popełnić a drugi ze zmienionymi popełnić.

+1

możliwy duplikat [Jak mogę przekazać poprawione zatwierdzenie do zdalnego repozytorium git?] (Http://stackoverflow.com/questions/253055/how-do-i-push-amended-commit-to-the-remote -git-repo) – Deebster

+0

@Deebster Pytanie, które łączyłeś, dotyczyło zmiany zatwierdzenia już przekazanego do zdalnego, zmieniam zatwierdzenie, które jeszcze nie zostało wysłane. – minerz029

+0

"Mam tylko jedną gałąź (master) i jestem jedyną osobą używającą tego repo" i "Widzę, że mam 2 gałęzie, jedną z oryginalnym zatwierdzeniem, a drugą ze zmienionym zatwierdzeniem." To jest sprzeczne, czy możesz? wyjaśnij, co dokładnie zrobiłeś –

Odpowiedz

45

Powinno tak być tylko w przypadku zmiany już zatwierdzonego zatwierdzenia. Generalnie nie powinieneś tego robić, ponieważ modyfikujesz opublikowaną historię. W twoim przypadku jednak powinieneś być w stanie uciec z push -f, która zastąpi zdalne zatwierdzenie poprawioną wersją.

+0

Nie mogę podziękować wystarczająco, był to dokładny powód, dla którego zmarnowałem ostatnie kilka minut, i tak, zrobiłem rozwiązać problem. –

6

ty zmieniła wyciągnął popełnić jak w

git pull origin master 
git commit -a --amend -m "..." 
git push 

można rozwiązać ten problem przez powracanie zmieniony popełnić:

git reset --mixed origin/master 

a następnie wykonywanie go ponownie jako pełnoprawny popełnić

+0

Co masz na myśli?Zmieniłem go przed wprowadzeniem zmian – minerz029

7

Tak, nie powinieneś tego robić (naciskając commit, potem zmieniając go i próbując ponownie go nacisnąć).

Zamiast tego można cofnąć Git do poprzedniego popełnić bez zmiany plików, a następnie tworząc nowy popełnić:

git reset --mixed origin/master 
git add . 
git commit -m "This is a new commit for what I originally planned to be an amendmend" 
git push origin master 

to stworzy nowy popełnić ze zmianami były o zmianę.

+0

Ale ja uruchomiłem 'git commit --amend' przed uruchomieniem' git push' na pierwszym miejscu – minerz029

+1

czy było jakieś zatwierdzenie pushed w pilocie, zanim doświadczyłeś problemu? –

+0

Już kilka razy pchnąłem kilka razy na pilota – minerz029