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 .

17voto

Bengt Punkte 13231

Es gibt auch eine Möglichkeit, Git so zu konfigurieren, dass es immer den äquivalenten entfernten Zweig zum aktuell ausgecheckten Zweig in die Arbeitskopie zieht und schiebt. Man nennt dies einen Tracking-Zweig, der bereit empfiehlt die Standardeinstellung .

Für das nächste Repository oberhalb des aktuellen Arbeitsverzeichnisses:

git config branch.autosetupmerge true

Für alle Git-Repositories, die nicht anders konfiguriert sind:

git config --global branch.autosetupmerge true

Ein bisschen magisch, IMHO, aber das könnte in Fällen helfen, in denen die bestimmte Branche est immer die aktuelle Verzweigung .

Wenn Sie branch.autosetupmerge eingestellt auf true und einen Zweig zum ersten Mal auschecken, informiert Sie Git über die Verfolgung des entsprechenden entfernten Zweigs:

(master)$ git checkout gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

Git wird dann automatisch in den entsprechenden Zweig pushen:

(gh-pages)$ git push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1003 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To git@github.com:bigben87/webbit.git
   1bf578c..268fb60  gh-pages -> gh-pages

9voto

Da ich meine Git-Konfigurationsdatei nicht bearbeiten wollte, folgte ich den Informationen in @mipadis Beitrag und verwendete:

$ git pull origin master

4voto

Ryan Graham Punkte 7768

Ihre unmittelbare Frage, wie Sie es schaffen, den Master zu ziehen, müssen Sie tun, was dort steht. Geben Sie in Ihrer Branch-Konfiguration die Refspec an, von der Sie ziehen wollen.

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

0voto

dr_dev Punkte 494

Ich wollte nur einige Informationen hinzufügen, damit wir überprüfen können, ob diese Informationen git pull automatisch auf einen beliebigen Zweig verweist oder nicht.

Wenn Sie den Befehl ausführen, git remote show origin (unter der Annahme, dass origin der Kurzname für remote ist), zeigt git diese Information an, ob es eine Standardreferenz für git pull oder nicht.

Nachfolgend finden Sie eine Beispielausgabe (aus der Git-Dokumentation).

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/schacon/ticgit
  Push  URL: https://github.com/schacon/ticgit
  HEAD branch: master
  Remote branches:
    master                               tracked
    dev-branch                           tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Bitte beachten Sie den Teil, in dem es heißt: "Local branch configured for git pull".

In diesem Fall, git pull wird sich beziehen auf git pull origin master

Wenn Sie das Repository zunächst mit git clone geklont haben, werden diese Dinge automatisch erledigt. Wenn Sie jedoch ein entferntes Repository manuell mit git remote add hinzugefügt haben, fehlen diese Angaben in der git-Konfiguration. Wenn das der Fall ist, fehlt der Teil, der anzeigt "Local branch configured for 'git pull':", in der Ausgabe von git remote show origin .

Die nächsten Schritte, die zu befolgen sind, wenn keine Konfiguration vorhanden ist für git pull sind bereits in anderen Antworten erläutert worden.

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