Wie zu erkennen, Unterschiede zwischen local repo remote repo git?
Sagen, ich habe einen git-Klon aus einer url bei einem repository. Ich habe einige änderungen an einer Datei, habe ein git commit.
Wenn ich ein git pull, sehe ich, dass es sagt, "Schon" up-to-date"
Sollte es nicht zeigen, etwas, das sagt, ich bin nicht up to date?
Meine Frage ist:
-
sagen, ich habe die änderung oben auf meinem lokalen repo, aber nicht verpflichten, für 2 Tage, aber vorher die 2 Tage um sind, jemand anderes hatte eine änderung vorgenommen, um das remote-repo. Welche Schritte muss ich tun, um sicherzustellen, ich bin nicht überschreiben von änderungen in das remote-repo-oder zumindest in der Lage sein, ziehen Sie die letzten änderungen vor dem commit?
-
Gibt es eine Möglichkeit, diff zwischen meinem lokalen repo-und remote-repo zu prüfen, welche Unterschiede gibt es? (im Fall, ich möchte nur daran erinnern, was ich vor hatte?)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein Erster Rat ist, nicht
git pull
. Tungit fetch
gefolgt von einemgit merge
.Zur Beantwortung Ihrer null ' te Frage: In der Tat, Sie sind up-to-date. Sie haben alle die begeht, die das remote-repository hat. So, es gibt nichts mehr zu Holen-oder merge1.
Zur Beantwortung Ihrer ersten Frage:
git commit
: committen Sie Ihre änderungen an Ihrem eigenen ast, völlig unabhängig, was in remote-repositories.git fetch origin
: Holen Sie den Inhalt des remote-repository (origin
), aber halten Sie Sie unterorigin/branch
Zweige. Ihr eigener code ist unberührt an dieser Stelle.git merge origin/master
: mergeorigin/master
ist diemaster
- branch des remote-repositoryorigin
(die Sie geholt nur jetzt) mit den aktuellen branch.git push origin
: push-back-commit und merge das remote-repositoryZur Beantwortung Ihrer zweiten Frage:
git fetch origin
: updateorigin/branch
Zweige.git diff origin/master
: Holen Sie sich die Differenz zwischen dem current-Zweig und der Zweigorigin/master
.1 Vermute, das ist, was die commits in deinem repository zunächst Aussehen, auf einem ast
master
:Dies ist direkt nach dem Klonen das repository. Jetzt sagen Sie, Sie haben einen neuen commit auf Ihrem lokalen Zweig
master
:Also gibt es zwei Dinge zu beachten hier.
Vorausgesetzt, dass keine Aktivität von jemand anderem in der remote -
origin
gibt es nichts neues zu Holen. Sogit fetch origin master
sagt Sie es ist nichts neues.Wenn Sie
git merge origin/master
wieder gibt es nichts zu verschmelzen.origin/master
ist ein Präfix vonmaster
. In anderen Worten,master
enthält bereits alle änderungen, dieorigin/master
hat, so gibt es nichts neues zu verschmelzen.Wenn Sie verwendet hatte
fetch
undmerge
stattpull
, können Sie leicht verstehen, die Teil des double-Befehl (pull
) ist das eine, die Ergebnisse in unerwarteten (Ihrer Meinung nach) Verhalten.Natürlich nach ein
git push origin master
erhalten Sie:Wenn Sie ziehen, es zieht in die Geschichte aus dem server und versucht automatisch zu verschmelzen, was Sie geändert haben, mit Dingen, die andere Menschen haben sich geändert. Wenn es es automatisch tun, dann wird es gelingen und Sie werden nicht sehen, nichts, und wenn es fehlschlägt, dann werden Sie gefragt, beheben Sie alle Konflikte. Sie werden nie in der Lage sein, still zu überschreiben änderungen, die andere gemacht haben.
Wenn Sie wollen, um zu sehen, ob jemand hat etwas verändert, Sie können laufen
git fetch
und danngit status
. Status drucken Sie, was für Dateien haben die änderungen lokal, aber es wird auch etwas sagen wie "Ihr branch ist 2 verpflichtet vor origin/master", das heißt, Sie haben 2 begeht, die nicht auf den server übertragen. Wenn jemand anderes hat gedrückt, um den server zu, dann wird es etwas sagen wie "Sie Ihre lokale Niederlassung und den origin/master haben sich auseinander entwickelt. Dies bedeutet, dass Sie und jemand anderes begangen haben, zu meistern, und wenn Sie ziehen Sie es versuchen, mischen Sie Sie, wie oben beschrieben.