Wie git merge behandeln uncommitted Änderungen an meinem Arbeits Baum zu machen?
Frage
Ein Mitarbeiter und ich arbeiten beide auf dem Master-Zweig im Moment. Ich habe einige Codes in meinem Arbeits Baum, ich will nicht zu begehen (Debugging-Anweisungen und dergleichen). Nun, wenn er Änderungen an einige dieser gleichen Dateien verpflichtet, ich kann sie nicht zusammen:
$ git merge origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.java' not uptodate. Cannot merge.
von einem Subversion-Hintergrund kommend, bin ich verwendet, um meinen Arbeits Baum automatisch zu haben zusammengeführt, wenn ich Änderungen aus dem Repository ziehen und wenn es Konflikte gibt, ich sie manuell lösen.
Der schnellste Weg, fand ich dies in git zu tun ist:
$ git stash
$ git merge origin/master
$ git stash pop
Im Wesentlichen Entfernen meiner unbestätigten Änderungen, die Zusammenführung zu tun und dann erneut die Anwendung der Änderungen. Wie kann ich fusionieren sage automatisch meinen Arbeitsbaum mit den Änderungen zusammenführen Ich versuche, in ziehen?
Lösung
Soweit ich sagen kann, das Beste, was Sie tun können, ist, was Sie bereits mit git stash
haben. Auch ich finde es seltsam, dass merge will nur mit sauberem Baum behandeln.
Andere Tipps
Vergessen Sie alles, was Sie jemals von Subversion gelernt.
Immer verpflichten, bevor externe Veränderungen einzuführen.
Stellen Sie sich vor, Sie hatten einen meist arbeit Baum - vielleicht nicht perfekt, aber Sie einige Fortschritte machen. Dann gehen Sie eine Zusammenführung zu tun, und der Code Sie bringen in nur verwüsteten (war Buggy selbst, zu viele Konflikte zu bewältigen, etc ...). Wäre es nicht schön, wenn Sie könnten nur das rückgängig machen?
Wenn Sie sich verpflichten, Sie können. Wenn Sie dies nicht tun, du bist nur leiden.
Denken Sie daran. Was Sie begehen nicht wurde sein, was Sie drücken, aber was Sie nicht über begehen kann leicht verlieren
Sie einfach die sichere und einfache Sache und begehen früh und begehen oft.
- Wenn die lokale Arbeit uncommitted
- Und Sie haben völlig neue Dateien eingeführt, die in dem entfernten Zweig nicht vorhanden ist:
- oder die Dateien von Ihrer lokalen Arbeit betroffen haben ZERO Überlappung mit den Dateien, die von den Änderungen betroffen, die vom Remote ziehen müssen:
- Sie haben Glück:
git pull
wird "einfach funktionieren"
- Sie haben Glück:
- Ansonsten:
- Wenn Ihre lokale Änderungen haben keine Überlappung mit Änderungen, die Sie ziehen:
- git stash funktioniert:
-
git stash save
-
git pull
-
git stash pop
-
- git stash funktioniert:
- Wenn Sie Ihre lokale Änderungen haben einige Überschneidungen mit Änderungen, die Sie ziehen:
- git stash werden manuelle Konfliktlösung benötigen:
-
git stash save
-
git pull
-
git stash pop
- lösen fusionieren Konflikte
-
git reset
-
git stash drop
-
- git stash werden manuelle Konfliktlösung benötigen:
- Wenn Ihre lokale Änderungen haben keine Überlappung mit Änderungen, die Sie ziehen:
- Wenn die lokale Arbeit verpflichtet sich
- Und die Dateien von Ihrer lokalen Arbeit betroffen haben ZERO Überlappung mit den betroffenen Dateien durch
- Sie haben Glück:
git pull
wird "einfach funktionieren" - Allerdings:
git pull --rebase
wird „noch besser funktioniert“ wegen einer saubereren Geschichte - gibt es keine Zusammenführung verpflichten; Ihre Änderungen werden nach dem Upstream-Änderungen begangen werden
- Sie haben Glück:
- Ansonsten:
- git pull wird manuelle Konfliktlösung benötigen:
-
git pull
- lösen fusionieren Konflikte
-
git add FILE
für jede widersprüchliche Datei -
git commit
-
-
git pull --rebase
konnte immer noch „arbeiten noch besser“ wegen einer saubereren Geschichte- jedoch Konflikte zu lösen verschmelzen könnte viel härter
- git pull wird manuelle Konfliktlösung benötigen:
- Und die Dateien von Ihrer lokalen Arbeit betroffen haben ZERO Überlappung mit den betroffenen Dateien durch
Für eine detaillierte Erklärung finden Sie unter: https://happygitwithr.com/pull-tricky.html
Sie können nicht git merge
sagen Änderungen an Dateien zusammenführen, die Änderungen in Bezug auf Ihr lokales Repository haben. Dies schützt Sie vor, um die Änderungen zu diesen Zeiten zu verlieren, wenn eine Zusammenführung schlecht geht.
Mit dem CVS und SVN Ansatz zur Zusammenführung, wenn Sie nicht manuell haben Sie Ihre Dateien kopieren, bevor das Update und es verschlüsselt sie auf Merge, müssen Sie manuell neu zu bearbeiten, um einen guten Zustand zu kommen.
Wenn Sie entweder Ihre Änderungen oder sie verschwinden lassen, bevor eine Zusammenführung zu tun, ist alles reversibel. Wenn die Zusammenführung nicht gut gehen kann man mehrere Möglichkeiten versuchen, damit es funktioniert und mit dem einen gehen, die am besten funktioniert.
Wenn Sie experimentelle oder Debuggen Änderungen tun begehen, könnten Sie git rebase
verwenden, um sie nach den Commits zu bewegen Sie über git merge
bekommen, um es einfacher zu machen von ihnen loszuwerden oder sie zu einem Repository, damit nicht versehentlich gedrückt wird.
Beachten Sie, dass git rebase
Verwendung auf einem Zweig Sie zu einem gemeinsamen Repository Kummer verursachen für jeden geschoben haben, die aus diesem Repository ziehen.
Ich ziehe git stash
in diesen Fällen zu verwenden, aber ich es nur verwenden, wenn die Zusammenführung ändert sich Dateien, die ich bearbeitet haben und nicht begangen hat.