2016-10-28 4 views
-1

Ich benutze Git seit einem Jahr und das ist das erste Mal, dass ich mich frage, was git pull tut.Was ist jetzt los?

So stolperte ich ein Problem. Ich versetze versehentlich etwas in meinen Dev-Zweig, aber das ist in Ordnung. Ich erstelle einen neuen Zweig der meine Änderungen dorthin geschoben hat. Also ging ich zurück Zweig dev und verstaute alle meine begehen mit:

$ git reset --hard origin/master

Dann möchte ich die neueste dev Zweig I git pull tun.

Hmm es heißt Merge Konflikt? was ich will, ist nur die neueste Version des Remote-Dev, das ist es, ich nehme an, dass ich bereits alles verstauen und es wird gut? Was ist los mit dir?

+0

Was 'git pull' macht, ist' git fetch' zuerst, dann 'git merge' zweitens. Wenn Sie wissen, dass der 'fetch'-Schritt Änderungen bringt, für die 'rebase' besser geeignet ist, können Sie' git pull' anweisen, 'git rebase' für den zweiten Schritt zu verwenden. (Aber woher weißt du, welches besser geeignet ist? Der sicherste Weg ist, "git fetch" selbst zu starten und das Ergebnis zu inspizieren. Dann führe 'git merge' aus, falls das korrekt ist, oder' git rebase', wenn du das bevorzugst. So hat 'Git Pull' wenig Wert.) – torek

+0

Rebase ist wie Versteck? Ich möchte nur eine Kopie des neuesten Dev-Zweiges. –

+0

Nein, rebase-Kopien commits (vermutlich und idealerweise * Ihre * commits), so dass die neuen Kopien nach einem anderen Punkt im Commit-Diagramm auftreten. (Git basiert stark auf der Graphentheorie: Commits bilden einen gerichteten azyklischen Graph, und es ist diese DAG, die "Geschichte" bildet. Rebase kopiert eine alte Geschichte an einen neuen Ort, wobei die kopierte Geschichte den gleichen * Effekt * hat, aber weiter ein anderer * Ausgangspunkt *.) Der Sinn der Verwendung von Git ist in erster Linie die Fähigkeit, * Ihre * Arbeit mit * der Arbeit eines anderen * zu kombinieren. – torek

Antwort

0

Sie können git fetch verwenden, das Ihre Zweigstelle aus dem Remote-Repository aktualisiert. Dann solltest du git merge verwenden. Git Pull macht auch das Gleiche, aber es fügt entfernte Änderungen in Ihrem Zweig zwangsweise zusammen, was zu Konflikten führen kann.

0

Ich vermute, dass der Zusammenführungskonflikt ist, weil der origin/master Zweig einige Commits hat, die origin/dev nicht tut. Der Grund wird jedoch wahrscheinlich die Lösung nicht ändern. Um dies zu beheben, statt git reset --hard origin/master, müssen Sie ausführen:

$ git fetch origin dev 
$ git checkout dev 
$ git reset --hard origin/dev 

Der erste Befehl werden alle Änderungen an origin/dev erhalten seit dem letzten gezogen.

Der zweite Befehl ist nur, um sicherzustellen, dass Sie auf dem Zweig dev sind.

Der dritte Befehl setzt Ihren lokalen Zweig dev zurück, um genau wie der entfernte Zweig origin/dev zu sehen.