Arbeiten, während auf anstehende PR gewartet wird

71

Ich arbeite an einem Projekt und habe meine erste Pull-Anfrage eingereicht. Während ich warte, möchte ich weiter an meinem Projekt arbeiten, das sich aus dem zusammensetzt, was ich an der noch ausstehenden Zusammenführung gearbeitet habe. Gerade habe ich :

*master
user_story_1

user_story_1 hat eine offene Pull-Anfrage.

Jetzt versuche ich, einen neuen Zweig zu erstellen, user_story_2in dem ich die Arbeit fortsetzen kann, von der ich noch übrig bin user_story_1. Wie kann ich dies in Git tun, ohne in einen Konflikt zu geraten oder meine ausstehende Zusammenführung zu beeinträchtigen?

Miguel Angel Quintana
quelle

Antworten:

71

Ich gehe davon aus, dass Sie den neuen user_story_2Zweig zusätzlich zu Ihrer Arbeit starten möchten user_story_1. Hier ist der Workflow, den ich in einem solchen Szenario verwende:

  1. Open Pull Request für user_story_1:

      * (user_story_1)
      *
     /
    * (master)
    *
    *
    
  2. Erstellen Sie einen neuen Zweig user_story_2basierend auf user_story_1:

    $ git checkout -b user_story_2 user_story_1
      * (user_story_1, user_story_2)
      *
     /
    * (master)
    *
    *
    
  3. Arbeiten Sie an der neuen Niederlassung:

      * (user_story_2)
      *      
      * (user_story_1)
      *
     /
    * (master)
    *
    *
    
  4. Pull Request wird zusammengeführt:

      * (user_story_2)
      *      
    * | (master)
    |\|
    | * (user_story_1)
    | *
    |/
    *
    *
    *
    
  5. Alten Zweig löschen:

      * (user_story_2)
      *      
    * | (master)
    |\|
    | *
    | *
    |/
    *
    *
    *
    
  6. Neuer Zweig auf master:

      * (user_story_2)
      *      
     /
    * (master)
    |\
    | *
    | *
    |/
    *
    *
    *
    
alextercete
quelle
9
Was passiert, wenn der erste Zweig abgelehnt wird?
Narayon
4
Normalerweise würde ich mich user_story_2auf Folgendes stützen master: git rebase --onto master user_story_1 user_story_2- könnte zu Konflikten führen, wenn die beiden Zweige nicht vollständig unabhängig sind.
Alextercete
Ich werde es versuchen
anquegi
1
In Schritt 6 erleichtert die Verwendung der interaktiven Neubasierung die Arbeit. Versuchen Sie es git rebase -i master, und es sollte eine Liste der Commits zum user_story_2Einschließen der früheren Commits von angezeigt werden user_story_1. Entfernen Sie die pickZeilen für Commits aus user_story_1und schließen Sie die Rebase ab.
Athyuttam Eleti
1
@shaneb Da user_story_1wurden zusammengeführt (und wahrscheinlich gelöscht), müssen Sie rebase user_story_2auf master. Es ist das gleiche Prinzip: masterEnthält jetzt alle Commits, die in user_story_1(plus dem Merge-Commit) enthalten waren. Es ist also praktisch das gleiche, als ob Sie nach dem Hinzufügen eines user_story_1weiteren Commits erneut eine Basis erstellt hätten . Zweige in Git sind nur eine Referenz (Think Pointer) auf ein Commit. Wenn Sie also auf einen Zweig zurückgreifen, wenden Sie Commits nur erneut auf ein neues Basis-Commit an (dasjenige, auf das der Basiszweig verweist).
Alextercete
9

Mein bevorzugter Workflow dafür:

  1. Auf Zweigstamm , git checkout -b user_story_1.
  2. Nehmen Sie Änderungen an vor user_story_1.
  3. Öffnen Sie PR für user_story_1.
  4. Auf Zweig user_story_1, git checkout -b user_story_2.
  5. Nehmen Sie Änderungen an vor user_story_2.
  6. Sobald user_story_1es mit dem Master zusammengeführt wurde, wechseln Sie zu user_story_2und tun Sie es git rebase -i master.
  7. Dies sollte Ihnen eine Liste der Commits user_story_2anzeigen, die Sie in die Rebase aufnehmen möchten. Löschen Sie die obersten Commits, die von stammen user_story_1.
  8. Die Rebase sollte sauber abgeschlossen werden, es sei denn, der Master wurde mit anderen Änderungen aktualisiert. Jetzt haben user_story_2Sie den Master neu aufgebaut und nur noch seine Commits.
Athyuttam Eleti
quelle
6

Erstellen Sie für jede Ihrer Storys / Features einen neuen Zweig vom Master.

Bevor Sie jeden Zweig wieder zusammenführen, führen Sie entweder den Master in diesen Zweig ein oder setzen Sie Ihren Zweig erneut auf den Master. Letzteres hat meine Präferenz, aber am Ende ist das Ergebnis das gleiche.

Sie werden Konflikte bekommen, daran führt kein Weg vorbei. Sie möchten jedoch Konflikte in Ihrer Branche lösen. nicht im Meister. Auf diese Weise können Sie Ihren Zweig testen, nachdem Sie die Konflikte gelöst haben, bevor Sie ihn mit dem Master zusammenführen.

Stephan Bijzitter
quelle
2
Solange Sie einen neuen Zweig aus Ihrem alten Zweig erstellen und nach der Synchronisierung des Masters neu starten (siehe akzeptierte Antwort), sollte es keine Konflikte geben.
Pixelbits
In der akzeptierten Antwort kann der zweite Zweig (vorausgesetzt, er hat Änderungen - andernfalls warum?) Definitiv Konflikte verursachen, nachdem der erste Zweig mit dem Master zusammengeführt wurde.
Stephan Bijzitter
Es könnte, aber wenn Sie der einzige sind, der daran arbeitet, sollte es nicht
Pixelbits