Ich bin ein Git-Neuling. Ich habe kürzlich ein Rails Projekt von Subversion nach Git verschoben. Ich habe das Tutorial hier verfolgt: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate- Ihr-Subversion-Repository-zu-einem-Git-Repository /
Ich verwende unfuddle.com auch, um meinen Code zu speichern. Ich nehme Änderungen an meinem Mac-Laptop im Zug zur/von der Arbeit vor und drücke sie dann mit dem folgenden Befehl, um die Verwirrung zu lindern, wenn ich eine Netzwerkverbindung habe:
git Push unfuddle master
Ich verwende Capistrano für Bereitstellungen und ziehe Code aus dem Unfuddle-Repository mithilfe des Master-Zweigs.
In letzter Zeit ist mir die folgende Meldung aufgefallen, 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 ich weiß nicht, ob entweder die Tatsache, dass ich ursprünglich von Subversion oder Push to Unfuddle gezogen habe, dazu führt, dass die Nachricht angezeigt wird. Wie kann ich:
Auf meinem Mac wird Git Version 1.6.0.1 ausgeführt.
Wenn ich 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 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 [email protected]:spilth/geekfor.git
Interessanterweise arbeite ich an meinem Projekt im Verzeichnis geekfor
, aber es besagt, dass mein Origin mein lokaler Computer im Verzeichnis gf
ist. Ich glaube, dass gf
das temporäre Verzeichnis war, das ich beim Konvertieren meines Projekts von Subversion nach Git verwendet habe und von dem ich wahrscheinlich die Unfuddle gemacht habe. Dann glaube ich, dass ich eine neue Kopie von unfuddle in das Verzeichnis geekfor
ausgecheckt habe.
Es sieht also so aus, als sollte ich dem Rat von dbr folgen und Folgendes tun:
git remote rm Origin
git remote add Origin [email protected]:spilth/geekfor.git
1.
Finden Sie heraus, wo Git glaubt, dass 'Origin/master'git-remote
verwendet
git remote show Origin
..was wird so etwas zurückgeben ..
* remote Origin
URL: [email protected]:~/something.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branch
master
Ein Remote ist im Grunde eine Verknüpfung zu einem Remote-Repository. Wenn Sie das tun..
git remote add unfuddle [email protected]/myrepo.git
git Push unfuddle
..git wird Änderungen an die von Ihnen hinzugefügte Adresse übertragen. Es ist wie ein Lesezeichen für Remote-Repositorys.
Wenn Sie git status
Ausführen, wird überprüft, ob der Fernbedienung Commits fehlen (im Vergleich zu Ihrem lokalen Repository), und wenn ja, um wie viele Commits. Wenn Sie alle Änderungen auf "Origin" übertragen, werden beide synchronisiert, sodass Sie diese Meldung nicht erhalten.
2.
Wenn es sich um einen anderen Ort handelt, wie verwandle ich meinen Laptop in "Origin/Master"?
Das hat keinen Sinn. Sagen Sie "Origin" wird in "Laptop" umbenannt - Sie möchten niemals git Push laptop
Von Ihrem Laptop aus ausführen.
Wenn Sie die Origin-Fernbedienung entfernen möchten, müssen Sie ..
git remote rm Origin
Dies löscht nichts (in Bezug auf Dateiinhalt/Revisionsverlauf). Dadurch wird die Meldung "Ihr Zweig ist um ... vorgerückt" gestoppt, da Ihr Repository nicht mehr mit dem Remote-Repository verglichen wird (weil es weg ist!).
Eine Sache, an die man sich erinnern sollte, ist, dass Origin
nichts Besonderes ist. Es ist nur ein Standardname, den git verwendet.
Git verwendet standardmäßig Origin
, wenn Sie Dinge wie git Push
Oder git pull
Ausführen. Wenn Sie also eine Fernbedienung haben, die Sie häufig verwenden (in Ihrem Fall Unfuddle), würde ich empfehlen, unfuddle als "Origin" hinzuzufügen:
git remote rm Origin
git remote add Origin [email protected]:subdomain/abbreviation.git
oder führen Sie die obigen Schritte in einem Befehl mit set-url aus:
git remote set-url Origin [email protected]:subdomain/abbreviation.git
Dann können Sie einfach git Push
Oder git pull
Zum Aktualisieren ausführen, anstatt git Push unfuddle master
.
Ich bin auf diese Frage gekommen und habe nach einer Erklärung gesucht, was die Botschaft "Ihr Zweig ist vor ..." im allgemeinen Schema von Git bedeutet. Darauf gab es hier keine Antwort, aber da diese Frage derzeit oben in Google angezeigt wird, wenn Sie nach dem Begriff "Ihre Branche steht vor" Origin/Master "" suchen, habe ich herausgefunden, was die Nachricht wirklich bedeutet Ich dachte, ich würde die Infos hier posten.
Als Neuling sehe ich, dass die Antwort, die ich brauchte, eindeutig eine Neuling-Antwort war. Konkret bedeutet der Ausdruck "Ihr Zweig ist weiter als ...", dass es Dateien gibt, die Sie zu Ihrem lokalen Repository hinzugefügt und festgeschrieben haben, aber noch nie an Origin gesendet haben. Die Absicht dieser Nachricht wird weiter dadurch verschleiert, dass "git diff", zumindest für mich, keine Unterschiede zeigte. Erst als ich "git diff Origin/master" ausführte, wurde mir gesagt, dass es Unterschiede zwischen meinem lokalen Repository und dem Remote-Master gibt.
Um es klar zu sagen:
"Ihre Niederlassung ist um ... voraus" => Sie müssen zum Remote-Master pushen. Führen Sie "git diff Origin/master" aus, um die Unterschiede zwischen Ihrem lokalen Repository und dem Remote-Master-Repository zu ermitteln.
Hoffe das hilft anderen Neulingen.
(Ich erkenne auch, dass es Feinheiten in der Konfiguration gibt, die diese Lösung teilweise ungültig machen können, z. B. die Tatsache, dass der Master möglicherweise nicht "remote" ist und dass "Origin" ein nach Konvention umkonfigurierbarer Name ist Das interessiert uns nicht. Wir wollen einfache, direkte Antworten. Wir können später über die Feinheiten nachlesen, wenn wir das dringende Problem gelöst haben.)
Graf
Ich hatte ein ähnliches Problem wie in meinem Arbeitsverzeichnis ahead of Origin by X commits
aber die git pull
ergab Everything up-to-date
. Ich habe es geschafft, es zu beheben, indem ich diesen Rat befolgte. Ich poste dies hier, falls es jemand anderem bei einem ähnlichen Problem hilft.
Das grundlegende Update 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 sollen. z.B.
$ git Push Origin master:master
manchmal gibt es einen Unterschied zwischen der lokal zwischengespeicherten Version des Origin-Masters (Origin/master) und dem echten Origin-Master.
Wenn du läufst git remote update
Dadurch wird Origin Master mit Origin/Master neu synchronisiert
siehe die akzeptierte Antwort auf diese Frage
nterschiede zwischen Git Pull Origin Master & Git Pull Origin/Master
Ich dachte mein Laptop wäre der Ursprung ...
Das ist unsinnig: Origin
bezieht sich auf das Standard-Remote-Repository, aus dem Sie normalerweise die Änderungen anderer Personen abrufen.
Wie kann ich:
git remote -v
zeigt dir, was Origin
ist; Origin/master
ist Ihr „Lesezeichen“ für den letzten bekannten Status des Zweigs master
des Repositorys Origin
, und Ihr eigener Zweig master
ist ein Verfolgungszweig = für Origin/master
. Das ist alles so wie es sein sollte .
Das tust du nicht. Zumindest macht es keinen Sinn, dass ein Repository das Standard-Remote-Repository für sich ist.
Ist es nicht. Es zeigt Ihnen lediglich, dass Sie lokal so viele Commits durchgeführt haben, die sich nicht im Remote-Repository befinden (gemäß dem letzten bekannten Status dieses Repositorys).
[Lösung]
$ git Push Origin
^ das hat es für mich gelöst. Was es tat, synchronisierte es meinen Master (auf dem Laptop) mit "Origin", das sich auf dem Remote-Server befindet.
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 die Grundlagen reduziert, um zu sehen, ob ich mein Problem klarstellen kann.
Ich erstelle ein neues Repository (rep1), lege eine Datei darin ab und übergebe sie.
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 ihn rep2. Ich schaue in rep2 und sehe, dass die Datei korrekt ist.
cd ~
git clone ~/rep1 rep2
cat ~/rep2/README
In rep1 nehme ich eine einzelne Änderung an der Datei vor und lege sie fest. Dann erstelle ich in rep1 eine Fernbedienung, um auf rep2 zu zeigen und die Änderungen zu übertragen.
cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git Push rep2 master
Wenn ich nun zu rep2 gehe und einen "Git-Status" mache, wird mir gesagt, dass ich Origin 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 es ursprünglich vor dem zweiten Commit war. Die einzigen Änderungen, die ich vorgenommen habe, sind rep1 und alles, was ich tun wollte, war, sie auf rep2 zu verschieben. Was fasse ich nicht?
Es wartet darauf, dass Sie "Push". Versuchen:
$ git Push
Ich bin auch ein Neuling. Ich hatte das gleiche Problem mit den Meldungen "Ihr Zweig ist Origin/Master um N Commits voraus". Das Ausführen des vorgeschlagenen "Git Diff Origin/Master" zeigte einige Unterschiede, die ich nicht behalten wollte. So ...
Da mein Git-Klon für das Hosting bestimmt war und ich eine genaue Kopie des Master-Repos haben wollte und keine lokalen Änderungen vornehmen wollte, entschloss ich mich, mein gesamtes Repo zu speichern und ein neues zu erstellen:
(auf dem Hosting-Rechner)
mv myrepo myrepo
git clone [email protected]_Host:/REPO_DIR myrepo
Aus Gründen der Zweckmäßigkeit habe ich den Klon auf meinem Hostcomputer geändert. Nicht mehr. Ich werde diese Änderungen am Master vornehmen, dort einen git Commit durchführen und einen git Pull durchführen. Hoffentlich sollte dies dazu führen, dass mein Git-Klon auf dem Host-Computer vollständig synchron bleibt.
/ Nara
Ich hatte vor kurzem dieses Problem und dachte, es liege 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 sie noch hat. (server = Origin)
Also rannte ich
git rm $(git ls-files --deleted)
Und dann lief ein Commit und Push.
Das hat das Problem gelöst.
Es ist möglich, ein bestimmtes Commit zurückzusetzen, bevor Ihre eigenen Commits ausgeführt werden.
$ 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, welches Commit das Commit war, das Sie hatten, bevor die lokalen Änderungen stattfanden.
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
Beachten Sie die lokalen Festschreibungen und setzen Sie sie direkt auf die vorherige Festschreibung zurück:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
Ich habe mich das Gleiche über mein Repo gefragt. In meinem Fall hatte ich eine alte Fernbedienung, auf die ich nicht mehr drückte, also musste ich sie entfernen.
Liste der Fernbedienungen abrufen:
git remote
Entfernen Sie die, die Sie nicht benötigen
git remote rm {insert remote to remove}