Gibt es eine Konfigurationsmöglichkeit, um dies einzurichten, ohne angeben zu müssen, welcher Zweig?
Antworten:
Git zieht bereits nur den aktuellen Zweig. Wenn Sie einen Zweig als Tracking-Zweig eingerichtet haben, müssen Sie den Remote-Zweig nicht angeben. git branch --set-upstream localbranch reponame/remotebranch
richtet die Tracking-Beziehung ein. Sie geben dann aus git pull [--rebase]
und nur dieser Zweig wird aktualisiert.
Natürlich werden alle Fernverfolgungszweige und alle Refs für die Fernbedienung aktualisiert, aber nur Ihr lokaler Verfolgungszweig wird geändert.
Nützlicher Bash-Alias, um die Eingabe dieser allgemeinen Operation zu reduzieren:
# Add an alias to pulling latest git changes into your same branch
alias pullhead='git pull origin $(git rev-parse --abbrev-ref HEAD)'
Powershell-Funktion, die dasselbe tut:
Function pullhead {
$cur_head="$(git rev-parse --abbrev-ref HEAD)"
& git pull origin ${cur_head}
}
Ich habe es einfach so gemacht:
git pull origin "$(git branch | grep -E '^\* ' | sed 's/^\* //g')"
oder
git pull origin $(git rev-parse --abbrev-ref HEAD)
Dadurch wird der aktuelle Zweig extrahiert git branch
und dieser Zweig vom entfernten Ursprung abgerufen.
Beachten Sie, dass, wie Seth Robertson sagte, wenn keine Argumente angegeben werden, nur der aktuelle Zweig geändert wird, aber alle entfernten Zweige abgerufen werden. Ich möchte nicht alle entfernten Zweige abrufen, also habe ich es so gemacht.
git branch
sollte nicht wirklich nach Brancheninformationen analysiert werden. Diese Informationen sind mit git rev-parse
dem Befehl verfügbar :git pull origin $(git rev-parse --abbrev-ref HEAD)
git pull origin <current-branch>
was sowieso die Standardeinstellung ist, nicht wahr? Bedeuten Sie, dass die anderen Remote-Zweige (z. B. Ursprung / anderer Zweig usw.) nicht aktualisiert werden, sodass der Datenverkehr reduziert wird?
git pull
Sie möglicherweise eine Nachricht wie There is no tracking information for the current branch. Please specify which branch you want to merge with.
. Dann tippt man immer git pull origin my-feature-branch
. Ich würde wirklich gerne wissen, wie diese Situation eintrifft, dass es keine Tracking-Informationen gibt.
AKTUALISIEREN
Die alte Antwort, die ich hinzugefügt habe, funktioniert nicht mehr: /. Aber nachdem ich einige positive Stimmen über die von mir platzierte PUSH-Version erhalten habe, bedeutet dies für mich, dass diese Antwort tatsächlich jemandem hilft, der von Suchmaschinen hierher kommt, also werde ich diese Antwort behalten.
Versuchen Sie dies für die neue Version von git:
$ git config --global push.default current
pull.default=current
. Ich sehe, dass meine git clone
standardmäßig auch hinzugefügt wurde, remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
aber das ist ziemlich Standard.
pull.default
Konfigurationsvariable. Wenn Sie das in Ihre Git-Konfiguration einfügen, wird dies nichts bewirken.
Ja, es gibt eine Konfiguration, die geändert werden kann .gitconfig
, zum Beispiel:
[push]
default = current
Dies würde den aktuellen Zweig dazu bringen, einen Zweig mit demselben Namen auf der Empfangsseite zu aktualisieren.
Überprüfen Sie durch:
git config --global --get push.default
Siehe: git-config .
Das --set-upstream
Flag ist veraltet und wird entfernt. Verwenden Sie daher --track
oder--set-upstream-to
Beispiel: Wenn Sie Tracking-Informationen für diesen Zweig festlegen möchten, können Sie dies tun mit:
git branch --set-upstream-to=<remote>/<branch> develop
--set-upstream-to=
Wird aber von git immer wieder erwähnt, wenn es nichts über Ihre Tracking-Informationen weiß. Ohne Erwähnung der Abschreibung.
Hier ist ein Git-Alias, der nicht davon ausgeht, dass sich die Fernbedienung befindet, origin
und behandelt, wenn der Zweig keine Fernbedienung verfolgt.
pullh = "!f() { set -e; set -o pipefail; arr=($(git rev-parse --abbrev-ref @{u} | sed 's/\\//\\n/')); git pull ${arr[0]} ${arr[1]}; }; f"
(Haftungsausschluss: Ich bin ein Bash-Neuling und das oben Genannte könnte wahrscheinlich stark vereinfacht werden.)