Ist es unbedingt notwendig, mehrere Fehler gleichzeitig zu bearbeiten? Und mit "sofort" meine ich "Dateien gleichzeitig für mehrere Fehler bearbeiten lassen". Denn wenn Sie das nicht unbedingt brauchen, würde ich in Ihrer Umgebung jeweils nur an einem Fehler arbeiten. Auf diese Weise können Sie lokale Filialen und Rebase verwenden, was für mich weitaus einfacher ist als die Verwaltung eines komplexen Stashs / einer komplexen Phase.
Angenommen, der Master befindet sich bei Commit B. Arbeiten Sie nun an Fehler 1.
git checkout -b bug1
Jetzt bist du auf Branch Bug1. Nehmen Sie einige Änderungen vor, legen Sie fest und warten Sie auf die Codeüberprüfung. Dies ist lokal, so dass Sie niemanden betreffen, und es sollte einfach genug sein, einen Patch aus Git-Diffs zu erstellen.
A-B < master
\
C < bug1
Jetzt arbeiten Sie an Bug2. Geh zurück zum Meister mit git checkout master
. Machen Sie einen neuen Zweig , git checkout -b bug2
. Nehmen Sie Änderungen vor, legen Sie fest, warten Sie auf die Codeüberprüfung.
D < bug2
/
A-B < master
\
C < bug1
Stellen wir uns vor, jemand anderes legt E & F für den Master fest, während Sie auf die Überprüfung warten.
D < bug2
/
A-B-E-F < master
\
C < bug1
Wenn Ihr Code genehmigt wurde, können Sie ihn mit den folgenden Schritten erneut als Master verwenden:
git checkout bug1
git rebase master
git checkout master
git merge bug1
Dies führt zu Folgendem:
D < bug2
/
A-B-E-F-C' < master, bug1
Dann können Sie pushen, Ihren lokalen Bug1-Zweig löschen und los geht's. Jeweils ein Fehler in Ihrem Arbeitsbereich, aber bei Verwendung lokaler Zweige kann Ihr Repository mehrere Fehler behandeln. Und das vermeidet einen komplizierten Bühnen- / Stash-Tanz.
Antwort auf die Frage von ctote in den Kommentaren:
Nun, Sie können für jeden Fehler zum Verstecken zurückkehren und jeweils nur mit einem Fehler arbeiten. Zumindest erspart Ihnen das Staging-Problem. Aber nachdem ich das versucht habe, finde ich es persönlich problematisch. Stashes sind in einem Git-Log-Diagramm etwas chaotisch. Und was noch wichtiger ist: Wenn Sie etwas vermasseln, können Sie nicht zurückkehren. Wenn Sie ein schmutziges Arbeitsverzeichnis haben und einen Stash einfügen, können Sie diesen Pop nicht "rückgängig machen". Es ist viel schwieriger, bereits vorhandene Commits zu vermasseln.
Also git rebase -i
.
Wenn Sie einen Zweig auf einen anderen umstellen, können Sie dies interaktiv tun (das Flag -i). Wenn Sie dies tun, haben Sie die Möglichkeit, auszuwählen, was Sie mit jedem Commit tun möchten. Pro Git ist ein großartiges Buch, das auch im HTML-Format online ist und einen schönen Abschnitt über Rebasing & Squashing enthält:
http://git-scm.com/book/ch6-4.html
Ich werde ihr Beispiel der Einfachheit halber wörtlich stehlen. Stellen Sie sich vor, Sie haben den folgenden Commit-Verlauf und möchten bug1 auf master neu starten und quetschen:
F < bug2
/
A-B-G-H < master
\
C-D-E < bug1
Folgendes sehen Sie, wenn Sie tippen git rebase -i master bug1
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Um alle Commits eines Zweigs zu einem einzigen Commit zusammenzufassen, behalten Sie das erste Commit als "pick" bei und ersetzen Sie alle nachfolgenden "pick" -Einträge durch "squash" oder einfach "s". Sie haben auch die Möglichkeit, die Commit-Nachricht zu ändern.
pick f7f3f6d changed my name a bit
s 310154e updated README formatting and added blame
s a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
Also ja, Quetschen ist ein bisschen schmerzhaft, aber ich würde es trotzdem empfehlen, wenn man viel Stashes benutzt.