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.
merge the feature branches (not dev!) into master
?dev
Branche gibt es keine wirkliche Neuentwicklung . Sie sollten Ihre Filialen funktionsspezifisch halten.dev
enthält nur Merge Commits. Es ist sinnvoller, alle neuen Features direkt zusammenzuführenmaster
, als die Features zusammenzuführen und dann das Ergebnis zusammenzuführenmaster
.dev
mit nur FeaturesA
B
undC
verschmolzen in sie inmaster
individuell verschmelzenden identisch istA
B
undC
inmaster
. Wenn nicht, fordert das mein Verständnis der Funktionsweise von Git heraus und ich wäre sehr gespannt, warum!Sie haben die Argumente in der falschen Reihenfolge:
und dafür spielt es keine Rolle, welcher Zweig ausgecheckt ist; es wird tun, was du sagst. (Wenn Sie das Festschreibungsargument weglassen, wird standardmäßig ein Zweig an derselben Stelle wie der aktuelle erstellt.)
Wenn Sie den neuen Zweig beim Erstellen auschecken möchten:
mit dem gleichen Verhalten, wenn Sie das Festschreibungsargument weglassen.
quelle
Sie können dies lokal tun, wie alle erwähnten
Alternativ können Sie dies in Github selbst tun, indem Sie die folgenden Schritte ausführen:
1- Klicken Sie im Repository auf
Commits
.2- Klicken Sie auf das Commit, von dem Sie verzweigen möchten, auf,
<>
um das Repository an dieser Stelle im Verlauf zu durchsuchen.3- Klicken Sie
tree: xxxxxx
oben links auf. Geben Sie einfach einen neuen Filialnamen ein und klicken SieCreate branch xxx
wie unten gezeigt.Jetzt können Sie die Änderungen lokal aus diesem Zweig abrufen und von dort aus fortfahren.
quelle
Versuchen
Das Commit sollte nur einmal in Ihrem Baum vorhanden sein, nicht in zwei separaten Zweigen.
Auf diese Weise können Sie dieses bestimmte Commit überprüfen und es so benennen, wie Sie möchten.
quelle
gitk
zur Visualisierung Ihres Protokolls zu verwendenDu musst:
(Sie haben den Filialnamen ausgetauscht und festgeschrieben)
Oder Sie können tun:
Wenn Sie anstelle Ihres Zweignamens einen Zweig verwenden, erhalten Sie einen Zweig aus der Spitze des Zweigs.
quelle
HEAD
heißt nicht. Sie könnten stattdessen "die Spitze des Zweigs" oder "das Festschreiben, auf das der Zweig zeigt" sagen.