502 Stimmen

Wie kann man Git dazu bringen, immer von einem bestimmten Zweig zu ziehen?

Ich bin kein Git-Master, aber ich arbeite schon seit einiger Zeit mit Git, und zwar bei verschiedenen Projekten. In jedem Projekt habe ich immer git clone [repository] und kann von diesem Punkt aus immer git pull Natürlich nur, solange ich keine ausstehenden Änderungen habe.

Kürzlich musste ich zu einem früheren Zweig zurückkehren und tat dies mit git checkout 4f82a29 . Als ich wieder bereit war, zu ziehen, fand ich, dass ich meine Verzweigung zurück zu Master setzen musste. Jetzt kann ich nicht mehr mit einer direkten git pull sondern müssen stattdessen angeben git pull origin master Das ist ärgerlich und zeigt mir, dass ich nicht ganz verstehe, was vor sich geht.

Was hat sich geändert, so dass ich nicht direkt eine git pull ohne Angabe des Herkunftsstamms, und wie kann ich ihn wieder ändern?

UPDATE:

-bash-3.1$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[branch "master"]
[remote "origin"]
    url = git@github.com:user/project.git
    fetch = refs/heads/*:refs/remotes/origin/*

UPDATE 2: Um klar zu sein, verstehe ich, dass meine ursprüngliche Methode falsch gewesen sein kann, aber ich muss dieses Repo zu beheben, so dass ich einfach verwenden können git pull wieder. Derzeit führt git pull zu folgenden Ergebnissen:

-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull  ').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.master.remote = 
    branch.master.merge = 
    remote..url = 
    remote..fetch = 

See git-config(1) for details.

Ich kann sagen git pull welcher Zweig zusammengeführt werden soll, und es funktioniert korrekt, aber git pull funktioniert nicht mehr wie ursprünglich vor meiner git checkout .

750voto

mipadi Punkte 377834

Unter [branch "master"] versuchen Sie, der Git-Konfigurationsdatei des Repos Folgendes hinzuzufügen ( .git/config ):

[branch "master"]
    remote = origin
    merge = refs/heads/master

Das sagt Git 2 Dinge:

  1. Wenn Sie sich auf dem Master-Zweig befinden, ist die Standard-Remote origin.
  2. Bei der Verwendung von git pull auf dem Master-Zweig, ohne Angabe von Remote und Branch, verwenden Sie den Standard-Remote (origin) und führen die Änderungen aus dem Remote-Master-Zweig ein.

Ich bin mir allerdings nicht sicher, warum diese Einstellung aus Ihrer Konfiguration entfernt wurde. Möglicherweise müssen Sie auch die Vorschläge befolgen, die andere Leute gepostet haben, aber dies könnte funktionieren (oder zumindest helfen).

Wenn Sie die Konfigurationsdatei nicht von Hand bearbeiten wollen, können Sie stattdessen das Kommandozeilentool verwenden:

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

142voto

Head Punkte 4541

Wenn Sie es vorziehen, können Sie diese Optionen über die Befehlszeile einstellen (anstatt die Konfigurationsdatei zu bearbeiten), wie folgt:

  $ git config branch.master.remote origin
  $ git config branch.master.merge refs/heads/master

Wenn Sie wie ich wollen, dass dies die Standardeinstellung für alle Ihre Projekte ist, einschließlich derer, an denen Sie in Zukunft arbeiten werden, dann fügen Sie es als globale Konfigurationseinstellung hinzu:

  $ git config --global branch.master.remote origin
  $ git config --global branch.master.merge refs/heads/master

88voto

cmcginty Punkte 106764
git branch --set-upstream master origin/master

Dies fügt die folgenden Informationen zu Ihrem config Datei:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Wenn Sie eine branch.autosetuprebase = always dann wird es auch hinzufügen:

    rebase = true

54voto

Es fällt mir schwer, mich an die genauen git config o git branch Argumente wie in den Antworten von mipadi und Casey, also verwende ich diese 2 Befehle, um die Upstream-Referenz hinzuzufügen:

git pull origin master
git push -u origin master

Dies fügt die gleichen Informationen zu Ihrer .git/config hinzu, aber ich finde es einfacher, sich daran zu erinnern.

24voto

Paul Punkte 16115

Git Pull kombiniert zwei Aktionen - das Abrufen neuer Übertragungen aus dem entfernten Repository in den verfolgten Zweigen und das anschließende Zusammenführen in Ihre aktuelle Branche .

Wenn Sie einen bestimmten Commit ausgecheckt haben, haben Sie keinen aktuellen Zweig, sondern nur HEAD, der auf den letzten Commit verweist, den Sie gemacht haben. Also git pull nicht alle Parameter angegeben sind. Deshalb hat es nicht funktioniert.

Basierend auf Ihren aktualisierten Informationen, was Sie versuchen zu tun, ist Ihre Remote-Repo zurückkehren. Wenn Sie den Commit kennen, der den Fehler eingeführt hat, ist der einfachste Weg, dies zu tun, mit git revert der einen neuen Commit aufzeichnet, der den angegebenen fehlerhaften Commit rückgängig macht:

$ git checkout master
$ git reflog            #to find the SHA1 of buggy commit, say  b12345
$ git revert b12345
$ git pull
$ git push

Da es Ihr Server ist, den Sie ändern wollen, gehe ich davon aus, dass Sie die Geschichte nicht umschreiben müssen, um den fehlerhaften Commit zu verstecken.

Wenn der Fehler in einem Merge-Commit eingeführt wurde, funktioniert dieses Verfahren nicht. Siehe Wie man eine fehlerhafte Zusammenführung wiederherstellt .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X