Wenn Sie diese branch
Befehlsform (mit Startpunkt) verwenden, spielt es keine Rolle, wo Sie sich HEAD
befinden.
Was machst du:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
Zuerst setzen Sie Ihre HEAD
auf den Zweig dev
,
Zweitens starten Sie beim Festschreiben einen neuen Zweig 07aeec98
. Bei diesem Commit gibt es keine bb.txt (gemäß Ihrem Github-Repo).
Wenn Sie einen neuen Zweig an dem Ort starten möchten, den Sie gerade ausgecheckt haben, können Sie entweder einen Zweig ohne Startpunkt ausführen:
git branch test
oder wie andere geantwortet haben, dort in einem Arbeitsgang verzweigen und auschecken:
git checkout -b test
Ich denke, dass Sie durch diese Tatsache, 07aeec98
die Teil der Branche ist , verwirrt sein könnten dev
. Es ist wahr, dass dieses Commit ein Vorfahr von ist dev
, dessen Änderungen erforderlich sind, um das letzte Commit in zu erreichen dev
. Es handelt sich jedoch um andere Verpflichtungen, die erforderlich sind, um den neuesten Stand zu erreichen dev
, und diese sind nicht unbedingt in der Geschichte von 07aeec98
.
8480e8ae
(wo Sie bb.txt hinzugefügt haben) ist zum Beispiel nicht in der Geschichte von 07aeec98
. Wenn Sie von verzweigen 07aeec98
, werden die Änderungen von nicht eingeführt 8480e8ae
.
Mit anderen Worten: Wenn Sie Zweig A und Zweig B in Zweig C zusammenführen und dann einen neuen Zweig mit einem Commit von A erstellen, werden die in B eingeführten Änderungen nicht angezeigt.
Hier hatten Sie zwei parallele Zweige master und dev, die Sie in dev zusammengeführt haben. Wenn Sie von einem Commit des Masters (älter als die Zusammenführung) verzweigen, erhalten Sie keine Änderungen von dev.
Wenn Sie neue Änderungen vom Master dauerhaft in Ihre Feature-Zweige integrieren möchten , sollten Sie master
diese zusammenführen und fortfahren. Dadurch werden jedoch Zusammenführungs-Commits in Ihren Feature-Zweigen erstellt.
Wenn Sie Ihre Feature-Zweige nicht veröffentlicht haben, können Sie sie auch auf dem aktualisierten Master neu basieren : git rebase master featureA
. Seien Sie bereit, mögliche Konflikte zu lösen.
Wenn Sie einen Workflow wünschen, in dem Sie Feature-Zweige ohne Merge-Commits bearbeiten und dennoch in neuere Änderungen im Master integrieren können, empfehle ich Folgendes:
- Basieren Sie jeden neuen Feature-Zweig auf einem Commit des Masters
- Erstellen Sie einen
dev
Zweig für ein Commit des Masters
- Wenn Sie sehen möchten, wie sich Ihr Feature-Zweig in neue Änderungen im Master integriert, fügen Sie sowohl den Master als auch den Feature-Zweig zusammen
dev
.
Legen Sie sich nicht dev
direkt fest, sondern verwenden Sie es nur zum Zusammenführen anderer Zweige.
Wenn Sie beispielsweise an Funktion A und B arbeiten:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
Führen Sie Zweige zu einem dev
Zweig zusammen, um zu überprüfen, ob sie mit dem neuen Master gut funktionieren:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
Sie können weiter an Ihren Feature-Zweigen arbeiten und neue Änderungen von Master- und Feature-Zweigen dev
regelmäßig zusammenführen.
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
Wenn es Zeit ist, die neuen Features zu integrieren, führen Sie die Feature-Zweige (nicht dev
!) In den Master ein.