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?

War es hilfreich?

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"
    • Ansonsten:
      • Wenn Ihre lokale Änderungen haben keine Überlappung mit Änderungen, die Sie ziehen:
        • git stash funktioniert:
          • git stash save
          • git pull
          • git stash pop
      • 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
  • 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
    • 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

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top