2017-10-01 2 views

Antwort

1

Um Ihre lokale Niederlassung zu halten aus der Fernbedienung:

  1. die lokale Niederlassung erstellen und Kasse (nennen wir es Ruby Zweig). Vergeben Sie alle Ihre feinkörnigen Commits nach Bedarf.

    m1 - m2  <- master, origin/master 
        \ 
        r1 - r2 - r3 <- Ruby (fine grained commits - no origin/Ruby) 
    
  2. Jedes Mal, wenn Sie ein grobkörniges Stück Arbeit vollständig in Ruby haben, die Sie an den Remote senden möchten, fusionieren es einen entsprechenden Zweig auf Ihrem lokalen Repo, der auf der auch ein Zweig ist Fernbedienung. Nehmen wir an, dieser Zweig master ist, aber es könnte wie dev etwas anderes sein, release-xyz, feature-123 etc.)

    m1 - m2 ------- m3 <- master (new merge m3 from Ruby) 
        \   /
        r1 - r2 - r3 <- Ruby 
    
  3. erstellen merge commit (m3 im Diagramm oben), Check-out um den Zweig zusammengeführt werden (dh master, usw.) und den Ruby-Zweig nicht auf master rebasen, wodurch alle Commits r1, r2 und r3 auf master kopiert würden. Führen Sie stattdessen einfach eine normale Zusammenführung mit einem Commit durch (d. H. git merge Ruby). Verschmelzen Sie die Gruppe der Änderungen in der Commit-Nachricht nach dem Zusammenführen, wie Sie es für richtig halten.

  4. Stellen Sie sicher, dass master ausgecheckt ist, und drücken Sie auf der Fernbedienung - oder spezielle Push-Befehle verwenden, um sicherzustellen, dass Sie master und nicht Ruby drängen.

    m1 - m2 ------- m3 <- master (origin/master updated to m3 from push) 
        \   /
        r1 - r2 - r3 <- Ruby (still no origin/Ruby - local only) 
    

Die Idee ist, dass wir Ruby als lokale Niederlassung halten nur, und es nie auf der Fernbedienung drücken. Natürlich schadet es nicht, Ruby zu pushen, wenn irgendjemand sonst Zugang zu diesen feinkörnigen Commits haben sollte. Wenn Sie Ruby drücken, wird es als Backup gespeichert, falls Ihr PC ausfällt, und Sie können es bei Bedarf auf einen anderen PC klonen, und Ihr Computer ist nicht verfügbar. Vielleicht möchten Sie also darüber nachdenken, Ruby einen Zweig zu machen, den Sie an die Fernbedienung senden - aber trotzdem wollen Sie wahrscheinlich immer noch mit einem einzigen Commit verschmelzen, wie oben beschrieben.

+0

Einige Diagramme wurden hinzugefügt, um die Visualisierung zu vereinfachen. Wie immer empfehle ich ein visuelles Git-Tool wie Git Extensions (open-source, plattformübergreifend), um die Zweige zu visualisieren, den Index zu sehen und Diffs einfach zu schreiben, etc. – LightCC

+0

Ich habe es versucht, es hat nicht gewunken. 'git merge Ruby' kopiert alle dazwischenliegenden Commits in' main' Branch. – Ruby

+0

Ich kann dies auf einem sauberen Repo erneut testen, aber das ist nicht normal Merge-Verhalten, sollten Sie speziell Cherry-Pick oder Rebase, um irgendwelche Commits zu kopieren.Bei einer Zusammenführung werden keine einzelnen Commits betrachtet, sondern nur die Gesamtsummenunterschiede seit dem letzten gemeinsamen Parent, und alle werden in einem Commit zusammengefasst. Haben Sie vielleicht spezielle Makros oder einige Konfigurationseinstellungen in diesem Repo oder global, die zu einem anderen Verhalten führen würden? Verwenden Sie 'git merge Ruby' direkt in der Befehlszeile? Möglicherweise müssen Sie die Ausgabe dieses Befehls für weitere Hilfe von der Konsole aus veröffentlichen. – LightCC

Verwandte Themen