2012-03-29 13 views
9

Ich habe einen 'Master' Zweig und mehrere Zweige. Angenommen, der Master-Zweig wird hauptsächlich als Veröffentlichungskandidat verwendet und in diesem Zweig findet keine Entwicklungsarbeit statt.Rebasing nach Squash Merge?

Die Themenzweige sind mehrere und werden vom Team geteilt. In einigen Zweigstellen arbeiten mehr als ein Entwickler an ihnen. Alle Themenzweige werden regelmäßig vom Master-Zweig rebasiert.

Um den Verlauf im "Master" Zweig zu bereinigen, habe ich eine 'git merge --squash' beim Zusammenführen von Code von Thema zu Master-Zweige. Das hat ganz gut funktioniert.

Jetzt - wenn Themenzweige rebased sind - werden die Commits dupliziert. Gibt es eine Möglichkeit, die Commits in den Zweigstellen zu bereinigen, nachdem die 'git merge --squash' erfolgreich war?

+0

Es funktioniert nicht perfekt in dem Fall von [gelöschte Dateien] (http://stackoverflow.com/a/14343784/281545). Vielleicht nicht der Weg zu gehen - siehe [hier] (http://stackoverflow.com/questions/1464642/git-merge-squash-wiederholt) –

Antwort

7

Hier können Sie das folgende Szenario übernehmen haben:

A - B - C (master) 
\ 
    D - E (topic) 

Wenn Sie fusionieren Thema in Master mit --squash Sie so etwas wie

A - B - C - F (master) 
\ 
    D - E (topic) 

erhalten Wo F alle Änderungen von D und E enthält Das Thema Rebasing am Master macht keinen Sinn, da der Zweig des Themas bereits Master ist (durch F). Statt einer Neuausrichtung könnten Sie den Zweig des Themas auf F verschieben, z.

git checkout master 
git branch -f topic F 

Welche ergibt:

A - B - C - F (master/topic) 

Alles, was Sie jetzt tun müssen, ist, um das bewegte Thema Zweig zu drücken:

git push -f origin topic 
+0

Vielen Dank! Das macht genau das, was ich brauchte. – mustard

+0

Seien Sie vorsichtig mit Squash - F kann Dateien enthalten, die Sie in Ihrem Zweigzweig gelöscht haben, siehe http://StackOverflow.com/a/14343784/281545 –

3

habe ich Gleiche wie Magnus zu tun, nur mit Paar Weitere Befehle:

git checkout master 
git merge --squash topic 
git commit -m "Add topic feature" 

git branch -D topic 
git checkout -b topic 

git push -f origin topic