Frage

Ich bin ein Git -Neuling. Ich habe kürzlich ein Rails -Projekt von Subversion auf Git verschoben. Ich folgte dem Tutorial hier: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

Ich benutze auch unfuddle.com, um meinen Code zu speichern. Ich nehme Änderungen an meinem Mac -Laptop im Zug zur/von der Arbeit vor und drücke sie dann auf die Entfusterung, wenn ich eine Netzwerkverbindung mit dem folgenden Befehl habe:

git push unfuddle master

Ich verwende Capistrano für Bereitstellungen und ziehe Code aus dem Unfuddle -Repository mit dem Master -Zweig.

In letzter Zeit habe ich die folgende Nachricht bemerkt, wenn ich auf meinem Laptop "Git -Status" ausführe:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

Und ich bin verwirrt, warum. Ich dachte, mein Laptop wäre der Ursprung ... aber weiß nicht, ob entweder die Tatsache, dass ich ursprünglich von Subversion oder dem Drücken zur Entluden gezogen habe, die Botschaft dazu bringt. Wie kann ich:

  1. Finden Sie heraus, wo Git "Herkunft/Master" denkt?
  2. Wenn es woanders ist, wie verwandle ich meinen Laptop in den 'Ursprung/Master'?
  3. Lassen Sie diese Nachricht verschwinden. Ich denke, Git ist über etwas unglücklich.

In meinem Mac wird Git Version 1.6.0.1 ausgeführt.


Wenn ich renne git remote show origin Wie von DBR vorgeschlagen, bekomme ich Folgendes:

~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

Wenn ich renne git remote -v Wie von Aristoteles Pagaltzis vorgeschlagen, bekomme ich Folgendes:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

Interessanterweise arbeite ich an meinem Projekt in der geekfor Verzeichnis, aber es heißt, mein Ursprung ist meine lokale Maschine in der gf Verzeichnis. Ich glaube gf War das temporäre Verzeichnis, das ich verwendet habe, als ich mein Projekt von Subversion in Git konvertierte und wahrscheinlich, wo ich mich entfalten musste. Dann glaube ich, dass ich eine frische Kopie von Unfuddle in die ausgecheckt habe geekfor Verzeichnis.

Es sieht also so aus, als sollte ich DBRs Rat folgen und tun:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
War es hilfreich?

Lösung

1. Finden Sie heraus, wo Git denkt, dass „Origin/Master“ verwendet wird git-remote

git remote show origin

.. was so etwas wie ..

* remote origin
  URL: me@remote.example.com:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

Eine Fernbedienung ist im Grunde ein Link zu einem Remote -Repository. Wenn Sie das tun..

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..Git wird Änderungen an die von Ihnen hinzugefügte Adresse vorantreiben. Es ist wie ein Lesezeichen für Remote -Repositories.

Wenn du rennst git status, Es prüft, ob die Fernbedienung Commits fehlt (im Vergleich zu Ihrem örtlichen Repository), und wenn ja, wie viele Commits. Wenn Sie alle Ihre Änderungen in "Origin" drücken, werden beide synchronisiert, sodass Sie diese Nachricht nicht erhalten.

2. Wenn es woanders ist, wie verwandle ich meinen Laptop in den 'Ursprung/Master'?

Es macht keinen Sinn, dies zu tun. Sagen Sie "Origin" wird in "Laptop" umbenannt - Sie wollen es nie tun git push laptop von Ihrem Laptop.

Wenn Sie die Entfernung der Herkunft entfernen möchten, tun Sie es ..

git remote rm origin

Dadurch wird nichts gelöscht (in Bezug auf Dateibekämpfung/Revisions-History). Dies stoppt die Nachricht "Ihre Zweigstelle ist nach vorne ...", da sie Ihr Repository nicht mehr mit der Fernbedienung vergleichen wird (weil sie weg ist!)

Eine Sache, an die man sich erinnern sollte, ist, dass nichts Besonderes an der Fall ist origin, Es ist nur ein Standardname, den Git verwendet.

Git verwendet origin standardmäßig, wenn Sie Dinge tun wie git push oder git pull. Wenn Sie also eine Fernbedienung haben, verwenden Sie viel (in Ihrem Fall entfachtlich), ich würde empfehlen, Unfuste als "Ursprung" hinzuzufügen:

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

Oder machen Sie das obige in einem Befehl mit SET-URL:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

Dann können Sie einfach tun git push oder git pull zu aktualisieren, statt um zu aktualisieren git push unfuddle master

Andere Tipps

Ich bin zu dieser Frage gekommen, um nach einer Erklärung zu suchen, wie die Nachricht "Ihr Zweig mit ..." im allgemeinen Schema von Git bedeutet. Hier gab es keine Antwort darauf, aber da diese Frage derzeit oben in Google angezeigt wird, wenn Sie nach dem Ausdruck "Ihre Zweigstelle ist vor" Origin/Master "voraussucht, habe ich seitdem herausgefunden, was die Nachricht wirklich bedeutet Ich dachte, ich würde die Informationen hier posten.

Als Git -Neuling kann ich sehen, dass die Antwort, die ich brauchte, eine deutlich Neulings -Antwort war. Insbesondere bedeutet die Phrase "Ihre Filiale vor ...", dass es Dateien gibt, die Sie hinzugefügt und in Ihr lokales Repository verpflichtet sind, aber nie auf den Ursprung gedrängt wurden. Die Absicht dieser Nachricht wird durch die Tatsache weiter verschleiert, dass "Git diff" zumindest für mich keine Unterschiede zeigte. Erst als ich "Git Diff Origin/Master" leitete, wurde mir gesagt, dass es Unterschiede zwischen meinem lokalen Repository und dem Remote -Master gab.

Also, um klar zu sein:


"Dein Zweig ist vor uns nach ..." => Sie müssen zum Remote -Master drücken. Laufen "Git Difforte Origin/Master" Um zu sehen, welche Unterschiede zwischen Ihrem lokalen Repository und dem Remote -Master -Repository sind.


Hoffe das hilft anderen Neulingen.

(Außerdem erkenne ich, dass es Konfigurations -Feinheiten gibt, die diese Lösung teilweise ungültig machen können, z. Es ist mir nicht wichtig. Wir wollen einfache, einfache Antworten. Wir können später über die Feinheiten lesen, sobald wir das drückende Problem gelöst haben.)

Graf

Ich hatte ein Problem, das diesem ähnlich war, wo mein Arbeitsverzeichnis war ahead of origin by X commits aber die git pull führte dazu Everything up-to-date. Ich habe es geschafft, es zu beheben, indem ich folgt Dieser Rat. Ich poste dies hier hier, falls es jemand anderem bei einem ähnlichen Problem hilft.

Die grundlegende Lösung lautet wie folgt:

$ git push {remote} {localbranch}:{remotebranch}

Wo die Wörter in Klammern durch Ihren Remote -Namen, Ihren lokalen Zweignamen und Ihren Remote -Zweignamen ersetzt werden sollten. z.B

$ git push origin master:master

Manchmal gibt es einen Unterschied zwischen der lokalen zwischengespeicherten Version des Ursprungsmeisters (Origin/Master) und dem wahren Ursprungsmeister.

Wenn du läufst git remote update Dies wird den Ursprungsmeister mit Herkunft/Master erneut synchieren

Siehe die akzeptierte Antwort auf diese Frage

Unterschiede zwischen Git Pull Origin Master & Git Pull Origin/Master

Ich dachte, mein Laptop wäre der Ursprung ...

Das ist eine Art unsinniger: origin Bezieht sich auf das Standard -Remote -Repository - das, von dem Sie normalerweise die Änderungen anderer Personen abrufen.

Wie kann ich:

  1. git remote -v wird Ihnen zeigen, was origin ist; origin/master ist Ihr „Lesezeichen“ für den letzten bekannten Zustand der master Zweig der origin Repository und Ihr eigenes master ist ein Tracking -Zweig zum origin/master. Dies ist alles so, wie es sein sollte.

  2. Du nicht. Zumindest macht es keinen Sinn, dass ein Repository das Standard -Remote -Repository für sich selbst ist.

  3. Es ist nicht. Es wird Ihnen lediglich gesagt, dass Sie so und so viele Commits vor Ort gemacht haben, die sich nicht im Remote-Repository befinden (nach dem letzten bekannten Zustand dieses Repositorys).

Lösung

$ git push origin

^ Dies hat es für mich gelöst. Was es getan hat, synchronisierte es meinen Master (auf dem Laptop) mit "Origin", der auf dem Remote -Server steht.

Ich kämpfe mit diesem Problem und keine der vorherigen Antworten befasst sich mit der Frage, wie ich sie sehe. Ich habe das Problem wieder auf seine Grundlagen zurückgezogen, um zu sehen, ob ich mein Problem klar machen kann.

Ich erstelle ein neues Repository (REP1), stelle eine Datei hinein und bestelle es.

mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"

Ich erstelle einen Klon von Rep1 und nenne es Rep2. Ich schaue in Rep2 und sehe, dass die Datei korrekt ist.

cd ~
git clone ~/rep1 rep2
cat ~/rep2/README

In Rep1 mache ich eine einzige Änderung der Datei und begehen Sie sie. Dann erstelle ich in Rep1 eine Fernbedienung, um auf Rep2 zu verweisen und die Änderungen voranzutreiben.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

Jetzt, wenn ich in Rep2 gehe und einen "Git -Status" mache, wird mir gesagt, dass ich vor dem Ursprung voraus bin.

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#

Readme in Rep2 ist so wie ursprünglich vor dem zweiten Commit. Die einzigen Änderungen, die ich vorgenommen habe, sind Rep1 und alles, was ich vornehmen wollte, war, sie auf Rep2 zu bringen. Was greife ich nicht?

Es wartet darauf, dass Sie "schieben". Versuchen:

$ git push

Ich hatte dieses Problem in letzter Zeit und dachte, es lag daran, dass ich einige Dateien gelöscht hatte, die ich nicht mehr brauchte. Das Problem ist, dass Git nicht weiß, dass die Dateien gelöscht wurden und dass der Server es noch hat. (Server = Ursprung)

Also rannte ich

git rm $(git ls-files --deleted)

Und dann lief ein Commit and Push.

Das löste das Problem.

Ich bin auch ein Git -Neuling. Ich hatte das gleiche Problem mit 'Dein Zweig ist vor Origin/Master durch N -Commits' Nachrichten voraus. Das vorgeschlagene "Git Diff -Ursprung/Master" zeigte einige Diffs, die ich nicht behalten wollte. So ...

Da mein Git -Klon für das Hosting gedacht war und ich eine genaue Kopie des Master Repo wollte und es nicht wollte, lokale Änderungen beizubehalten, habe ich mich entschlossen, mein gesamtes Repo zu speichern und eine neue zu erstellen:

(auf der Hosting -Maschine)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

Für die Zweckmäßigkeit habe ich Änderungen am Klon auf meiner Hosting -Maschine vorgenommen. Nicht mehr. Ich werde diese Änderungen an dem Meister vornehmen, mich dort engagieren und einen Git ziehen. Hoffentlich sollte dies meinen Git -Klon auf der Hosting -Maschine vollständig synchronisiert halten.

/Nara

Ich habe mich über mein Repo das Gleiche gefragt. In meinem Fall hatte ich eine alte Fernbedienung, auf die ich nicht mehr drängte, also musste ich sie entfernen.

Holen Sie sich Liste der Fernbedienungen:

git remote

Entfernen Sie den, den Sie nicht brauchen

git remote rm {insert remote to remove}

Es ist möglich, auf ein bestimmtes Commit zurückzusetzen, bevor Ihre eigenen Commits stattfinden.

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)

Verwenden git log Um herauszufinden, was das Commit war, war das Commit, das Sie hatten, bevor die örtlichen Änderungen stattfanden.

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

Beachten Sie die lokalen Commits und setzen Sie direkt auf das vorherige Commit zurück:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

Ich hatte das Problem "Dein Zweig ist vor 'Origin/Master' von NN Commits voraus." Als ich zu einem Remote -Repository mit:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

Als ich feststellte, dass meine Fernabwehr in der Datei .git/fetch_head war und verwendet wurde:

git push

Das Problem verschwand.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top