wake-up-neo.com

Wie finde ich den Ort von Origin / Master in Git und wie ändere ich ihn?

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:

  1. Finden Sie heraus, wo Git denkt, dass "Origin/Master" ist?
  2. Wie verwandle ich meinen Laptop in "Origin/Master"?
  3. Lass diese Nachricht verschwinden. Es lässt mich denken, dass Git über etwas unglücklich ist.

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
225
Brian Kelly

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.

192
dbr

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

285
Earl Jenkins

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
38
Mims H. Wright

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

24
chim

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:

  1. 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 .

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

  3. 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).

9

[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.

3
Chris

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?

1
Steve Hindmarch

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

$ git Push

1
Vino

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

1
Nara Narasimhan

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.

1
looneydoodle

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
0
RobLoach

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}
0
Jason Rikard