Czy istnieje sposób konfiguracji, aby to ustawić bez konieczności określania, która gałąź?
Odpowiedzi:
Git już pobiera tylko bieżącą gałąź. Jeśli masz oddział skonfigurowany jako gałąź śledząca, nie musisz określać gałęzi zdalnej. git branch --set-upstream localbranch reponame/remotebranch
utworzy relację śledzenia. Następnie wystawiasz git pull [--rebase]
i tylko ta gałąź zostanie zaktualizowana.
Oczywiście wszystkie zdalne gałęzie śledzenia i wszystkie referencje dla zdalnego zostaną zaktualizowane, ale tylko lokalna gałąź śledzenia zostanie zmodyfikowana.
Przydatny alias Bash, aby ograniczyć wpisywanie tej typowej operacji:
# Add an alias to pulling latest git changes into your same branch
alias pullhead='git pull origin $(git rev-parse --abbrev-ref HEAD)'
Funkcja PowerShell, która robi to samo:
Function pullhead {
$cur_head="$(git rev-parse --abbrev-ref HEAD)"
& git pull origin ${cur_head}
}
Po prostu zrobiłem to w ten sposób:
git pull origin "$(git branch | grep -E '^\* ' | sed 's/^\* //g')"
lub
git pull origin $(git rev-parse --abbrev-ref HEAD)
Spowoduje to wyodrębnienie bieżącej gałęzi z git branch
i ściągnięcie tej gałęzi ze zdalnego źródła.
Zauważ, że jak powiedział Seth Robertson, gdy nie podano żadnych argumentów, modyfikowana jest tylko bieżąca gałąź, ale wszystkie zdalne gałęzie są pobierane. Nie chcę pobierać wszystkich zdalnych oddziałów, więc zrobiłem to w ten sposób.
git branch
nie powinno być analizowane w poszukiwaniu informacji o gałęzi. Informacje te są dostępne git rev-parse
po git pull origin $(git rev-parse --abbrev-ref HEAD)
git pull origin <current-branch>
że i tak jest to ustawienie domyślne, prawda? Czy sugerujesz, że inne zdalne gałęzie (np. Pochodzenie / inna gałąź itp.) Nie są aktualizowane, więc ruch jest ograniczony?
git pull
możesz otrzymać wiadomość typu There is no tracking information for the current branch. Please specify which branch you want to merge with.
. Wtedy zawsze kończysz pisać git pull origin my-feature-branch
. Naprawdę chciałbym wiedzieć, jak dochodzi do tej sytuacji, że nie ma informacji o śledzeniu.
AKTUALIZACJA
Stara odpowiedź, którą dodałem, już nie działa: /. Ale po otrzymaniu kilku pozytywnych opinii na temat wersji PUSH, którą umieściłem, dla mnie oznacza, że ta odpowiedź faktycznie pomaga komuś, kto kończy przychodzenie tutaj z wyszukiwarek, więc zatrzymam tę odpowiedź.
Wypróbuj to w nowej wersji git:
$ git config --global push.default current
pull.default=current
. Widzę, że mój git clone
domyślnie również został dodany, remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
ale to dość standardowe.
pull.default
zmiennej konfiguracyjnej. Umieszczenie tego w konfiguracji git nic nie da.
Tak, istnieje konfiguracja, którą można zmienić .gitconfig
, na przykład:
[push]
default = current
co spowodowałoby wypchnięcie bieżącej gałęzi do aktualizacji gałęzi o tej samej nazwie po stronie odbierającej.
Sprawdź przez:
git config --global --get push.default
Zobacz: git-config .
--set-upstream
Flaga jest przestarzała i zostanie usunięta. Dlatego użyj --track
lub--set-upstream-to
Przykład: jeśli chcesz ustawić informacje o śledzeniu dla tego oddziału, możesz to zrobić za pomocą:
git branch --set-upstream-to=<remote>/<branch> develop
--set-upstream-to=
git wciąż o nim wspomina, gdy nie wie o twoich informacjach o śledzeniu. Bez wzmianki o wycofaniu.
Oto alias git, który nie zakłada, że pilot jest origin
i obsługuje, jeśli gałąź nie śledzi pilota.
pullh = "!f() { set -e; set -o pipefail; arr=($(git rev-parse --abbrev-ref @{u} | sed 's/\\//\\n/')); git pull ${arr[0]} ${arr[1]}; }; f"
(Zastrzeżenie: jestem bardzo nowicjuszem w bash i powyższe prawdopodobnie można by znacznie uprościć.)