2013-05-30 31 views
6

Używam drogę przepływu git zarządzania oddziały w moim repo, jak opisano w: http://nvie.com/posts/a-successful-git-branching-model/git scalić z --no-ff i --squash

Zatem sekwencja poleceń należy używać byłby jako następująco:

git checkout mybranch 
git pull --rebase origin develop 
git checkout develop 
git merge --no-ff mybranch 

jednak jest jedna rzecz, którą chciałbym zrobić inaczej, w niektórych przypadkach:

chciałbym zachować wszystkie moje zobowiązuje na mój oddział specjalny (mybranch), ale mają skoczyli razem (lub zgniecili) do pojedynczego diffa po połączeniu z develop.

Więc to jest to, co myślę, że sekwencja poleceń powinny być:

git checkout mybranch 
git pull --rebase origin develop 
git checkout develop 
git merge --no-ff --squash mybranch 

Czy będę robić rzeczy złe, gdybym połączyć --no-ff z --squash?

jestem niezdecydowany spróbować tego się wywodzi, jak „tępienia” i „zachowanie historii” są wymagania ortogonalne - patrz Squashing all of my commits (including merges) into one commit without altering history

Moje uzasadnienie jest, że chcę, aby zachować historię na jednej gałęzi (mybranch) i suqash na inny oddział (develop) -> ponieważ te działania są wykonywane w oddzielnych oddziałach, to jest OK.

+0

Dlaczego nie można po prostu spróbować. Zawsze możesz wykonać twardy reset, jeśli nie działa. Zrób tymczasowy oddział w starym miejscu. Trwać. Spróbuj. Wiesz, że chcesz ... –

Odpowiedz

1

Próbowałem łączenie --squash i --no-FF razem i otrzymała:

fatal: You cannot combine --squash with --no-ff. 

git merge zasadzie jest squash. Po rozwiązaniu konfliktów pojawi się jako jeden commit podczas rozwijania. Różnica wersji scalonej jest wynikiem rozwiązywania konfliktów. I tak, zmiany na moim banku są zachowane. Po prostu wykonaj "gitk mybranch &" po scaleniu w celu weryfikacji.

Poza tym, że Cień jest poprawny. Nie bój się. Utwórz nowy oddział, obejrzyj i zobacz, jakie są wyniki.

Uszkodzenie zostało wykonane w poleceniu "git pull --rebase origin develop".

Answer (zakłada, że ​​lokalny oddział rozwijać na podstawie pochodzenia/opracowania):

git checkout develop 
git pull 
git merge --no-ff mybranch 
+0

Kto na świecie jest "Cieniem"? Miałeś na myśli "Cupcake"? – masotime

+0

Zgaduję, że ktoś zmienił nazwisko lub usunął odpowiedź od mojego posta. – cforbish