git push do określonej gałęzi

104

Nawet po przeczytaniu tego pytania: git-push-current-branch wciąż mam trudności ze zrozumieniem, jak napisać polecenie git push. Jak wspomniano w linku do pytania, z dokumentacji nie wynika jasno.

Chciałbym wykorzystać mój przykład z „prawdziwego świata”. Oto, co widzę, gdy wykonuję git statuspolecenie na najwyższym poziomie mojej gałęzi:

W oddziale amd_qlp_tester

Twoja gałąź wyprzedza „origin / amd_qlp_tester” o 5 zatwierdzeń.

itp...

Więc nazwa mojej gałęzi jest taka, amd_qlp_testerże została „rozgałęziona” od głównej gałęzi (jeśli mam błędne terminy, to z powodu mojego tła SVN). Ale jest też nazwa `` origin / amd_qlp_testser ''

Jak więc mam sformułować moje polecenie push?

Czy jest to którykolwiek z poniższych:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
code_fodder
źródło

Odpowiedzi:

93

git push origin amd_qlp_testerbędzie działać dla Ciebie. Jeśli po prostu wpiszesz git push, to wartość zdalna bieżącej gałęzi będzie wartością domyślną.

Składnia push wygląda następująco - git push <remote> <branch>. Jeśli spojrzysz na pilota w .git/configpliku, zobaczysz wpis, [remote "origin"]który określa adres URL repozytorium. Tak więc w pierwszej części polecenia powiesz Gitowi, gdzie znaleźć repozytorium dla tego projektu, a następnie po prostu określ gałąź.

Petr Mensik
źródło
Dzięki za to :), można wyjaśnić, dlaczego są to dwa oddzielne „słowa”, gdy Opis Stan dit wyświetla go jako ścieżki, czyli dlaczego jest tak, origin amd_qlp_testsera nieorigin/amd_qlp_tester
code_fodder
Domyślne „zdalne” jest oparte na konfiguracji bieżącej gałęzi (w tym przypadku tak będzie origin). Gałąź (y), do których mają zostać przekazane wartości domyślne (w obecnych wersjach git), :jeśli nie są ustawione, co oznacza matching, ale powinno się to zmienić w przyszłości.
torek
Jestem trochę zdezorientowany, używam v2.10, kiedy piszę git push, próbuje wypchnąć wszystkie śledzone gałęzie, w przeciwieństwie do tego, co powiedziałeś ("pilot bieżącej gałęzi jest wartością domyślną").
Roberto
Git 2.x powinien używać simplestrategii wypychania, co oznacza, że ​​będzie przekazywać tylko bieżącą gałąź. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik
fatal: Couldn't find remote ref branch-name-here
doug65536
115

Jeśli oddział lokalny i oddział zdalny mają tę samą nazwę, możesz to zrobić:

git push origin branchName

Jeśli nazwa twojego lokalnego i zdalnego oddziału jest inna, możesz to zrobić:

git push origin localBranchName:remoteBranchName
Imranmadbar
źródło
To było bardzo pomocne, trudne do znalezienia :)
Pe Dro
Tak, masz rację, też trudno zapamiętać!
Imranmadbar
8

Odpowiedzi, z którymi się łączysz, dotyczą konfiguracji gita, tak abyś mógł wpisać bardzo krótko git push polecenia i kazać im robić, co chcesz. Co jest świetne, jeśli wiesz, czego chcesz i jak to przeliterować w Git-Ese, ale jesteś nowy w git! :-)

W Twoim przypadku, Petra Mensika jest (no, „a”) właściwa. Dlatego:

Polecenie zakorzenia się w twoim pliku, aby znaleźć nazwanego „pilota” (np.git push remote.git/configorigin .). Plik konfiguracyjny zawiera:

  • gdzie (według adresu URL) ten zdalny „żyje” (np. ssh://hostname/path )
  • gdzie idą pchnięcia, jeśli inne
  • co jest pchane, jeśli nie powiedziałeś, którą gałąź (gałęzie) pchnąć
  • co jest pobierane podczas biegania git fetch remote

Kiedy po raz pierwszy sklonowałeś repozytorium - kiedykolwiek tak było - git ustaw domyślne wartości dla niektórych z nich. URL jest cokolwiek sklonowany z reszta, jeśli zestaw lub unieważnione, wszystkie są „rozsądne” ... lub domyślnie, hmm, to prawda?

Problem z nimi polega na tym, że ludzie z czasem zmienili zdanie co do tego, co jest „rozsądne”. Tak więc teraz (w zależności od twojej wersji git i tego, czy szczegółowo skonfigurowałeś), git może wypisać wiele ostrzeżeń o zmianach domyślnych w przyszłości. Dodanie nazwy „gałęzi do wypchnięcia” - amd_qlp_tester- (1) zamyka ją, a (2) wypycha tylko tę jedną gałąź.

Jeśli chcesz wygodniej pchać, możesz to zrobić za pomocą:

git push origin

lub nawet:

git push

ale to, czy zrobisz to, co chcesz, zależy od tego, czy zgodzisz się z „wczesnymi autorami git”, że oryginalne wartości domyślne są rozsądne, czy też „późniejszymi autorami git”, że oryginalne wartości domyślne nie są rozsądne. Tak więc, jeśli zechcesz (ostatecznie) wykonać wszystkie czynności konfiguracyjne, zobacz pytanie (i odpowiedzi), z którym się łączysz.

A jeśli chodzi o nazwę, origin/amd_qlp_testerto w rzeczywistości jest to jednostka lokalna (nazwa przechowywana w repozytorium), mimo że nazywa się to „zdalną gałęzią”. To najlepsze przypuszczenie, „gdzie tam amd_qlp_testerjest”. Git aktualizuje go, gdy tylko może .

torek
źródło
1
Dzięki za wyjaśnienie, myślę, że teraz wszystko jest jasne. Lubię być precyzyjny, więc będę się trzymał, git push origin amd_qlp_testerdopóki nie będę musiał robić bardziej zaawansowanych rzeczy :)
code_fodder
2

Chciałbym dodać zaktualizowaną odpowiedź - teraz używam gita od jakiegoś czasu, stwierdzam, że często używam następujących poleceń, aby wykonać jakiekolwiek wypychanie (używając oryginalnego pytania jako przykładu):

  • git push origin amd_qlp_tester- push do oddziału znajdującego się na zdalnym wywołanym originoddziale o nazwie amd_qlp_tester.
  • git push -u origin amd_qlp_tester- to samo, co poprzednio, ale ustawia łączenie w górę oddziału lokalnego do oddziału zdalnego, dzięki czemu następnym razem możesz po prostu użyć, git push/pulljeśli nie jest jeszcze połączony (wystarczy to zrobić raz).
  • git push - Po skonfigurowaniu upstream możesz po prostu użyć tej krótszej wersji.

-uOpcja Uwaga to krótka wersja --set-upstream- są takie same.

code_fodder
źródło