Ich benutze Git seit ungefähr einem Jahr und finde es fantastisch, aber ich habe gerade mit einer zweiten Version des Projekts begonnen und einen neuen Zweig dafür gestartet. Ich kämpfe ein wenig mit der besten Art und Weise, mit den zukünftigen Dingen umzugehen.
Ich habe zwei Zweige mit den Namen master10 (für v1) und master20 (für v2). Ich habe Fehlerbehebungen in Version 1 auf Zweig master10 vorgenommen und neue Inhalte von master20 entwickelt. Immer wenn ich einen Bugfix mache, füge ich ihn in v2 ein, indem ich master20 auschecke und mache git merge master10
. So weit, ist es gut.
Jetzt habe ich jedoch eine Änderung in Version 1 vorgenommen, die ich in Version 2 nicht möchte, aber ich möchte weiterhin andere Fehlerkorrekturen zusammenführen. Wie kann ich Git anweisen, dieses bestimmte Commit (oder eine Reihe von Commits) zu überspringen, aber in Zukunft möchte ich noch andere Fehlerbehebungen zusammenführen.
Ich dachte, es git rebase
könnte das sein, was ich brauche, aber ich habe das Dokument gelesen und mein Kopf explodierte fast.
Ich denke, was ich will, ist so etwas wie ein "git sync" -Befehl, der git mitteilt, dass zwei Zweige jetzt synchron sind und in Zukunft nur die Commits ab diesem Synchronisierungspunkt zusammenführen.
Jede Hilfe geschätzt.
quelle
IMHO ist es am logischsten, alles zusammenzuführen und dann mit git revert (commit_you_dont_want) zu entfernen .
Beispiel:
Wenn Sie mehrere Commits zum Ignorieren haben oder die Nachricht zum Zurücksetzen bearbeiten möchten:
Dann könnte Ihre Geschichte aussehen wie:
Wenn Sie Konflikte haben, die NUR diese "zu ignorierenden" Commits betreffen, können Sie Folgendes verwenden:
Ihre Version bleibt also über der anderen bestehen. Auch ohne Fehlermeldungen können Sie diese unerwünschten Festschreibungen "zurücksetzen", da sie möglicherweise andere Änderungen aufweisen, die nicht in Konflikt geraten sind, und Sie möchten sie dennoch nicht.
Wenn Sie Konflikte haben, die NICHT NUR die "zu ignorierenden" Commits betreffen, sollten Sie sie manuell lösen, und Sie müssen sie wahrscheinlich während des Zurücksetzens erneut lösen.
quelle
Zu den Commits gehört die Abstammung. Sie können ein Commit nicht zusammenführen, ohne vorherige Commits zusammenzuführen.
Sie können sie natürlich pflücken. Das ist ein guter Ablauf, wenn Sie einen Zweig haben, der sich im Wartungsmodus befindet.
quelle
Klingt nach einem klassischen Fall für 'git cherry-pick' https://git-scm.com/docs/git-cherry-pick. Es macht genau das, wonach es sich anhört
quelle
Eine Art Werbung für mein Projekt, die im Grunde den von @araqnid beschriebenen Prozess umschließt.
Es ist eine Art Helfer, der folgenden GIT-Flow einführt:
Ein Zitat von der Projektseite:
quelle
Erstellen Sie einen dritten Zweig für die gewünschten Änderungen in master10, jedoch nicht in master20. Betrachten Sie master10 immer als Ihren "Master", den stabilsten Zweig von allen. Der Zweig, mit dem alle anderen Zweige jederzeit synchron bleiben möchten.
quelle
Anstelle von
revert
odercherry-pick
für diesen Fall müssen Sie git dazu bringen, die Änderungen, die Sie überspringen, als älter als die von Ihnen vorgenommenen zu betrachten.So:
git merge ccc
git merge fff --no-commit
git merge --continue
git merge source-branch-head
Nach Schritt 4 betrachtet git Ihren Zweig als aktueller als dieses Commit, da Sie sich bereits damit befasst haben (indem Sie IHRE Versionen der Dinge beibehalten).
quelle