it-swarm.com.de

"Keine Festschreibung angegeben und merge.defaultToUpstream nicht festgelegt"

Als neuer git-Benutzer, der ein Experte für SVN und CVS ist, habe ich Schwierigkeiten, die grundlegendsten Funktionen von git zu nutzen.

Ich verwende ein freigegebenes Repo bei assembla.com

Ich habe einen lokalen Klon erstellt und eine Datei hinzugefügt:

$ git clone repository-url
$ echo "hello" > ha.txt
$ git add -A
$ git commit -a -m "haha"
$ git Push

ANMERKUNG: Zu diesem Zeitpunkt bekam ich die Fehlermeldung "Keine gemeinsamen Referenzen und keine Angabe; nichts tun". Nach einigen Stunden Googeln fand ich die Lösung darin, dies einzugeben

$ git Push Origin master

Dann ging ich zu einem anderen Computer, modifizierte die Datei und verpflichtete sie (überraschenderweise musste ich die git Push Origin-Magie nicht machen) ... Dann ging ich zurück zum Hauptcomputer, modifizierte ihn erneut, also ich konnte sehen, wie das Zusammenführen funktioniert.

$ git fetch
$ git merge

Nun bekomme ich den Fehler:

fatal: Kein Commit angegeben und merge.defaultToUpstream nicht gesetzt.

Wenn Sie sich die Manpage für "git merge" ansehen, müssen Sie Folgendes angeben:

$ git merge [< commit >..]

Das Problem ist, ich kann nicht herausfinden, was < commit > bedeutet und was es sein sollte. Z.B. Soll es eine Datei, ein Repo, eine Nachricht, eine Version sein?

Ich habe keinen Zweig erstellt - ich arbeite gerade an dem "Kopf" oder Meister, wie es meiner Meinung nach von git heißt

Leider ist Google in dieser Hinsicht keine große Hilfe. Die Manpages scheinen zu erwarten, dass Sie wissen, was ein < refspec >, < commit > und Origin sind.

Irgendwelche Hilfe zu diesem Noob-Problem geschätzt.

32
John Little

Normalerweise rufen Sie git merge nicht ohne Argumente auf (zumindest kenne ich niemanden, der dies tut). Wenn Sie möchten, dass merge standardmäßig auf den Tracking-Zweig gesetzt wird, müssen Sie merge.defaultToUpstream auf true setzen: git config merge.defaultToUpstream true. Ihr master-Zweig muss Origin/master in diesem Fall verfolgen: git branch --set-upstream master Origin/master. Dies geschieht automatisch, wenn Origin/master beim Klonen bereits vorhanden war.

Persönlich mache ich git fetch und dann git merge Origin/master oder git pull, wenn ich keine lokalen Commits habe.

Edit: Als VonC wird merge.defaultToUpstream standardmäßig auf true seit Git 2.0 gesetzt.

40
atamanroman

Hinweis: Wenn Ihr Zweig master bereits Origin/master verfolgt (Sie können das mit git branch -avvv oder einem längeren Alias ​​ sehen), wird ein git mergenicht mehr angezeigt:

fatal: No commit specified and merge.defaultToUpstream not set.

Das nächste Git 2.à.x (Q3 2014) wird diese Fehlermeldung entfernen:
siehe commit a01f7f2 von Felipe Contreras (felipec) :

merge: Aktivieren Sie standardmäßig defaulttoupstream

Das hat keinen Sinn:

% git merge
fatal: No commit specified and merge.defaultToUpstream not set.

Wir wissen, dass das wahrscheinlichste Szenario ist, dass der Benutzer den Upstream zusammenführen möchte. Andernfalls kann er merge.defaultToUpstream auf false setzen.

Das bedeutet, dass Sie nicht mehr brauchen:

git config merge.defaultToUpstream true
7
VonC

Lesen Sie Pro Git , es ist eine sehr gute Möglichkeit, Git kennenzulernen.

Es wird Ihnen sagen, dass Ihre merge, die ohne erstellte Verzweigung und ohne als Verzweigungsquelle eingestellte Verzweigung erstellt wurde, keinen Sinn macht.

Es zeigt Ihnen auch den Unterschied zwischen git fetch und git pull, was wichtig ist.

Beim Abrufen von Änderungen wird der Zweig nicht verschoben, beim Ziehen jedoch.

5
HonkyTonk

Hoffe, das ist eine dringend benötigte Einstellung nach dem ersten Git Setup. Legen Sie die standardmäßige Zweigzuordnung als globale Option fest.

git config --global merge.defaultToUpstream true

0
sajin tm