Próbuję zaktualizować repozytorium Git na GitHub. Zrobiłem kilka zmian, dodałem je, popełniłem, a potem próbowałem zrobić git push
. Odpowiedź mówi mi, że wszystko jest aktualne, ale najwyraźniej tak nie jest.
git remote show origin
odpowie z repozytorium, którego oczekiwałem.
Dlaczego Git informuje mnie, że repozytorium jest aktualne, skoro istnieją lokalne zatwierdzenia, które nie są widoczne w repozytorium?
[searchgraph] git status
# On branch develop
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Capfile
# config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)
[searchgraph] git add .
[searchgraph] git status
# On branch develop
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: Capfile
# new file: config/deploy.rb
#
[searchgraph] git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
2 files changed, 26 insertions(+), 0 deletions(-)
create mode 100644 Capfile
create mode 100644 config/deploy.rb
[searchgraph] git push
Everything up-to-date
[searchgraph] git status
# On branch develop
nothing to commit (working directory clean)
Odpowiedzi:
git push
nie wypycha wszystkich oddziałów lokalnych: skąd ma wiedzieć, do których oddziałów zdalnych je przekazać? Wypycha tylko lokalne gałęzie, które zostały skonfigurowane do wypychania do określonej gałęzi zdalnej.W mojej wersji Gita (1.6.5.3) po uruchomieniu
git remote show origin
wypisuje, które gałęzie są skonfigurowane do wypychania:P: Ale mógłbym naciskać,
master
nie martwiąc się o to wszystko!Kiedy ty
git clone
, domyślnie ustawia twoją lokalnąmaster
gałąź do wypychania domaster
gałęzi zdalnego (lokalnie określanej jakoorigin/master
), więc jeśli tylko zatwierdziszmaster
, to prostygit push
zawsze odrzuci twoje zmiany z powrotem.Jednak z opublikowanego przez Ciebie fragmentu danych wyjściowych znajdujesz się w gałęzi o nazwie
develop
, która, jak sądzę, nie została skonfigurowana do wysyłania niczego. Więcgit push
bez argumentów nie będzie wypychać zatwierdzeń w tej gałęzi.Kiedy jest napisane „Wszystko aktualne”, oznacza to, że „wszystkie gałęzie, które mi powiedziałeś, są aktualne”.
P: Jak więc mogę pushować moje zmiany?
Jeśli chcesz wprowadzić zmiany z
develop
doorigin/master
, prawdopodobnie powinieneś scalić je z lokalnym,master
a następnie wypchnąć:Jeśli chcesz utworzyć
develop
gałąź na zdalnym, oddzielnym odmaster
, to podaj argumenty dogit push
:To spowoduje: utworzenie nowej gałęzi na zdalnym wywołaniu
develop
; i zaktualizuj tendevelop
oddział w lokalnym oddziale; i zestawdevelop
do pchania sięorigin/develop
więc, że w przyszłości,git push
bez argumenty będą naciskaćdevelop
automatycznie.Jeśli chcesz wypchnąć swój lokalny lokal
develop
do zdalnego oddziału o nazwie innej niżdevelop
, możesz powiedzieć:Jednak, że forma nie będzie skonfigurować
develop
, aby zawsze naciskać abyorigin/something-else
w przyszłości; to jednorazowa operacja.źródło
git push origin x
nadal nie ustawiałem gałęzi x do wypchnięcia w przyszłości. Było to spowodowane specyficzną pushspec w.gitconfig
[remote "origin"]
sekcji, która powodowała zachowanie gita.git push origin
miałem ten problem, używając twojego przykładugit push origin develop
i dostosowując go do mojej głównej gałęzi,git push origin master
problem został rozwiązany, dziękiZdarzyło mi się to, gdy moja aplikacja SourceTree uległa awarii podczas przemieszczania. W wierszu poleceń wydawało się, że poprzedni
git add
został uszkodzony. W takim przypadku spróbuj:Przy ostatnim poleceniu może być konieczne ustawienie gałęzi.
Pamiętaj, że to wystarczy, jeśli nie wykonałeś żadnego rozgałęziania ani żadnego podobnego. W takim przypadku upewnij się, że naciskasz na właściwą gałąź, na przykład
git push origin develop
.źródło
Próbować:
źródło
Spróbuj przejść do ostatniego zatwierdzenia, a następnie zrób
git push origin HEAD:master
.źródło
Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
git push
: / To pracował dla mnie, a także:git push origin HEAD:my_branch_name
.W moim przypadku żadne inne rozwiązanie nie zadziałało. Musiałem zrobić kopię zapasową nowych zmodyfikowanych plików (pokazanych z
git status
) i uruchomić plikgit reset --hard
. Pozwoliło mi to na ponowne dopasowanie do zdalnego serwera. Dodawanie nowych zmodyfikowanych plików i uruchamianieZrobiłem sztuczkę. Mam nadzieję, że to komuś pomoże, jako rozwiązanie „ostatniej szansy”.
źródło
W tej chwili wygląda na to, że jesteś w gałęzi deweloperskiej. Czy masz rozwiniętą gałąź na swoim pochodzeniu? Jeśli nie, spróbuj
git push origin develop
.git push
zadziała, gdy dowie się o rozwijającej się gałęzi w Twoim pochodzeniu.W trakcie dalszej lektury zajrzałbym do stron podręcznika man git-push , w szczególności do sekcji przykładów.
źródło
Mówiąc konkretnie, jeśli chcesz scalić coś do masteringu, możesz wykonać poniższe kroki.
Jest to powszechna praktyka w modelu żądania ściągnięcia, aby utworzyć nową gałąź lokalną, a następnie wypchnąć tę gałąź do zdalnego. W tym celu musisz wspomnieć, gdzie chcesz zdalnie przesłać zmiany. Możesz to zrobić, wspominając o zdalnym w momencie naciśnięcia.
Jeśli chcesz utworzyć gałąź inną niż nazwa twojego oddziału lokalnego, możesz to zrobić za pomocą następującego polecenia.
źródło
Dzięki Samowi Stokesowi. Zgodnie z jego odpowiedzią możesz rozwiązać problem w inny sposób (ja użyłem w ten sposób). Po zaktualizowaniu katalogu deweloperskiego należy go ponownie zainicjować
Następnie możesz zatwierdzać i przesyłać aktualizacje do mastera
źródło
git init
i otwórz nową kartę poleceń, wpisz:git push origin branch_name
Zdarzyło mi się to, gdy byłem
^C
w środku agit push
do GitHub. GitHub nie pokazał jednak, że zmiany zostały wprowadzone.Aby to naprawić, dokonałem zmiany w moim drzewie roboczym, zatwierdziłem i ponownie nacisnąłem. Działało doskonale.
źródło
To mi się przydarzyło. Po prostu ponownie zatwierdziłem zmiany, a potem nacisnąłem.
źródło
Próbowałem wielu metod, w tym zdefiniowanych tutaj. Co mam to
Upewnij się, że nazwa repozytorium jest prawidłowa. Najlepszym sposobem jest skopiowanie linku z repozytorium i wklejenie go w git bash.
Upewnij się, że zatwierdziłeś wybrane pliki.
Jeśli oba kroki nie działają, spróbuj
git push -u -f origin master
źródło
Zamiast tego możesz spróbować wykonać następujące czynności. Nie musisz iść do
master
; możesz bezpośrednio wymusić wprowadzenie zmian z samej gałęzi.Jak wyjaśniono powyżej, dokonując rebase, zmieniasz historię swojego oddziału. W rezultacie, jeśli spróbujesz zrobić coś normalnego
git push
po rebase'u, Git odrzuci to, ponieważ nie ma bezpośredniej ścieżki od zatwierdzenia na serwerze do zatwierdzenia w twojej gałęzi. Zamiast tego musisz użyć flagi-f
lub,--force
aby powiedzieć Gitowi, że tak, naprawdę wiesz, co robisz. Podczas wykonywania wymuszonych pchnięć zdecydowanie zaleca siępush.default
ustawienie prostego ustawienia konfiguracji, co jest wartością domyślną w Git 2.0. Aby upewnić się, że konfiguracja jest poprawna, uruchom:Gdy wszystko będzie poprawne, możesz po prostu uruchomić:
I sprawdź swoje żądanie pull. Powinien zostać zaktualizowany!
Aby uzyskać więcej informacji, przejdź do dolnej części Jak ponownie wykonać żądanie ściągnięcia .
źródło
Zdarzyło mi się to, gdy próbowałem wypchnąć z nowej gałęzi i
git push origin master
zamiast tego użyłem . Powinieneś albo:git push origin your_new_branch
jeśli chcesz, aby ta gałąź wystąpiła również w zdalnym repozytorium.git merge origin master
.źródło
Spróbuj
git add -A
zamiastgit add .
źródło
źródło