2017-07-20 3 views
1

Ich habe eine Filiale namens Masterdev.Remote-und lokale Git-Repository

Ich habe einige commit zu diesem Zweig, so ist es vielleicht 10 Commits voraus von der Masterdev, die auf dem Server ist. Aber in der Tat sind diese Commits nicht mehr gut, also möchte ich sie nicht schieben.

Ich könnte wiederherstellen oder Rebase kann das Gegenteil von dem, was ich getan habe, in denen commit zu bekommen. Aber das scheint mir überhaupt nicht klar zu sein.

Also was ich tun wollte, ist das gleiche Verhalten als git Pull Herkunft Masterdev, wenn Masterdev war hinter.

Ich möchte meine lokale Masterdev löschen, um die gleiche wie auf dem Server zu erhalten.

+1

Sie können einfach Git Reset durchführen. – ShellZero

+0

Mögliches Duplikat von [Lokalen Repository-Zweig zurücksetzen wie HEAD des Remote-Repositorys] (https://stackoverflow.com/questions/1628088/reset-local-repository-branch-to-be-just-like-remote-repository- Kopf) – ob1

Antwort

2

Ich denke, was Sie wollen, ist - dies wird Ihre lokale Version von Masterdev zurücksetzen und Ihre Commits entfernen. Dann ziehen Sie, um sicherzustellen, dass Sie auf dem neuesten Stand sind.

git reset --hard origin/masterdev 

git pull origin masterdev 
+1

Diese Antwort ist auch richtig, und der O/P sollte sich damit einigermaßen wohl fühlen. – torek

+0

Ich habe gerade einen Test gemacht, und genau das habe ich gesucht. Danke für Ihre Hilfe. Aber es scheint, dass der Git Pull danach nutzlos ist. Wenn da nichts mehr zu ziehen ist. – Minirock

+0

"Wenn da natürlich nichts mehr zu ziehen ist" ja natürlich. Diese Zeile ist nicht unbedingt notwendig, um Ihr Problem zu lösen, aber es ist wahrscheinlich eine gute Angewohnheit, sich daran zu gewöhnen, da es dabei hilft, Zusammenfügungskonflikte zu vermeiden. –

2

Wenn Sie nichts wert haben im Index und Arbeit Baum zu speichern, ein einfaches git reset --hard genügt:

$ git status 
On branch masterdev 
Your branch is ahead of 'origin/masterdev' by 10 commits. 
    (use "git push" to publish your local commits) 
nothing to commit, working tree clean 
$ git fetch origin 
... [snip] 
$ git reset --hard origin/masterdev 

Wenn Sie einige Arbeit zu tun haben, zu speichern, werden Sie wahrscheinlich es begehen sollte und etwas tun komplexer als nur eine einfache git reset --hard.

(Der Zwischen git fetch Schritt vor oder nach den git status ausgeführt werden kann, wenn die Anzahl der vor und/oder hinter verpflichtet als Ergebnis ändern kann. Ich git pull im Allgemeinen empfehlen zu vermeiden, und Sie werden es nicht dazu brauchen Fall.)

0

git reset --hard origin/masterdev sollte den Trick tun. Dann können Sie einfach tun git pull origin masterdev

+1

'HEAD ^' nimmt an, dass nur ein Commit zu verwerfen ist. (Und 'HEAD' alleine verwirft keine Commits - Sie würden' HEAD ~ 10' wollen, wenn das die richtige Anzahl von Commits wäre, aber es ist einfacher, 'git fetch' einfach auszuführen, um' origin/masterdev' zu aktualisieren und dann zu verwenden das direkt.) – torek

+0

Richtig. Mein Fehler. Vielen Dank. Es wurde aktualisiert. :) – ShellZero

0

Einfach, nur git checkout --track origin/master. Wird der Zweig für Sie lokal erstellen und genau so wie die Remote-Version sein