Die Situation:
- Meister ist bei X.
- quickfix1 ist bei X + 2 Commits
So dass:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Dann fing ich an, an quickfix2 zu arbeiten, nahm aber versehentlich quickfix1 als Quellzweig zum Kopieren, nicht den Master. Jetzt ist quickfix2 bei X + 2 Commits + 2 relevanten Commits.
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
Jetzt möchte ich einen Zweig mit quickfix2 haben, aber ohne die 2 Commits, die zu quickfix1 gehören.
q2a'--q2b' (quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Ich habe versucht, einen Patch aus einer bestimmten Revision in quickfix2 zu erstellen, aber der Patch behält den Commit-Verlauf nicht bei. Gibt es eine Möglichkeit, meinen Commit-Verlauf zu speichern, aber einen Zweig ohne Änderungen in quickfix1 zu haben?
quickfix1
. (Beachten Sie auch den Unterschied in den Antworten.)Antworten:
Dies ist ein klassischer Fall von
rebase --onto
:Also solltest du gehen von
zu:
Dies geschieht am besten an einem sauberen Arbeitsbaum.
Siehe
git config --global rebase.autostash true
insbesondere nach Git 2.10 .quelle
q2a
aufX
und ziehen Sie Rebase 2-Commits aus den Optionen des auftretenden Dialogfelds.git rebase --onto
.rebase.autostash
Konfiguration hinzuzufügen : Dadurch wird ein Verlust der laufenden Arbeit im Arbeitsbaum vermieden, wenn eine Rebase ausgeführt wird.Sie können
git cherry-pick
einfach das Commit auswählen, über das Sie kopieren möchten.Der wahrscheinlich beste Weg ist, den Zweig aus dem Master heraus zu erstellen und dann in diesem Zweig
git cherry-pick
die 2 Commits von quickfix2 zu verwenden, die Sie möchten.quelle
Das Einfachste, was Sie tun können, ist, eine Auswahl an Kirschen zu treffen. Es macht das gleiche wie das
rebase --onto
, ist aber einfacher für die Augen :)quelle
rebase --onto
auch die ursprünglichen Änderungen bei?rebase
undcherry-pick
geben Ihnen neue SHA-Schlüssel. Dies liegt daran, dass jedes Commit eine eindeutige Momentaufnahme des Repositorys ist.cherry-pick
einen Bereich wie in dieser Antwort zu finden, und es hat mein Repo verwirrt. Ich musstecherry-pick
für jedes Commit individuelle s machen. (Und vielleicht ist es selbstverständlich, aber falls jemand Probleme hat, müssen Siecherry-pick
in der chronologischen Reihenfolge, in der Ihregit checkout
ist hier entscheidend. Was ist dein KOPF :)?Ich glaube es ist:
quelle
cherry-pick
funktioniert mit Commit-Hashes. Wenn Sie also nur ein Commit von irgendwoher abrufen und an einem anderen Ort ablegen möchten, ist dies der richtige Weg. Stellen Sie einfach sicher, dass Siecheckout <branch>
zuerst den richtigen Zweig ausführen.Weitere nützlichere Befehle hier mit Erläuterung: Git Guide
quelle