Wenn Sie einen Support-Zweig haben, wo Sie Fehler beheben und neue Versionen erstellen. Auf Master haben Sie die nächste Version, wo Sie auch häufig neue Versionen erstellen.
Jedes Mal, wenn Sie eine neue Version erstellen, ändern Sie die Version in einer Datei, übergeben diese neue Datei, erstellen ein Tag und drücken. Jetzt mergt von Unterstützung zu Master wird immer Konflikte in der Datei, die die Versionsinformationen enthält.
Wenn die Datei mit der Versionsinformation nur die Versionsinformation enthält, können Sie mit der Antwort von fcurella gehen. Wenn es tatsächlich jedoch auch zusammenführbare Informationen enthält (pom.xml, gradle.properties, MANIFEST.MF, ...), müssen Sie zusätzliche Aktionen ausführen.
Hier können Sie das folgende Beispiel
C---D*---E---F* support
/
A---B---G---H*---I master
verwenden, wo mit Sternen Änderungen enthalten nur Änderungen aufgrund Version verpflichtet, die während der Zusammenführung ignoriert werden sollte.
Um Unterstützung in Master ohne Merge-Konflikte aufgrund der Version baut zu fusionieren, Sie eine der folgenden Möglichkeiten:
Multiple Merge verpflichtet
git checkout master
git merge C
git merge D -s ours
git merge E
git merge F -s ours
Mit dem -s ours
Argument, das wir sagen git, nur eine Zusammenführung aufzunehmen, ohne den Arbeitsbereich zu verändern. Dies ist vergleichbar to the --record-only
option of svn.
Das obige wird nachfolgend Layout-Ergebnis
-------------C---D*---E---F* support
/ \ \ \ \
A---B---G---H*---I---J---K----L---M master
Eine merge commit Verwendung kirsch Pick
git checkout master
git merge support -s ours --no-commit
git cherry-pick C E --no-commit
git commit -m 'merged support into master'
erste werden wir eine merge sondern nur Datensatz beginnend die wir fusionieren, ohne dass die Änderung Arbeitsbereich und ohne den Merge-Commit auszuführen. Dann pflücken wir die Commits, um zu verschmelzen, wiederum ohne zu begehen. Endlich begehen wir die Zusammenführung.
Die oben wird im folgenden Layout führen
C---D*---E---F* support
/ \
A---B---G---H*---I---J master
Man könnte sogar die Rosinenpickerei automatisieren.
git checkout master
git merge support -s ours --no-commit
for id in `git log support --reverse --not HEAD --format="%H [%an] %s" |
grep -v "bump version" |
sed "s/\(\w*\)\s.*/\1/g"`
do
git cherry-pick --no-commit $id
done
git commit -m 'merged support into master'
Mögliche Duplikate von [git - Überspringen bestimmter commits beim Zusammenführen] (https://stackoverflow.com/questions/727994/git-skipping-specific-commits-when-merging) - Ich weiß, dass es jünger ist, aber seine [ akzeptierte Antwort] (https://Stackoverflow.com/a/729723/321973) ist IMHO besser –