Obecnie, gdy uruchamiam git svn dcommit
git tworzy osobne zatwierdzenie w SVN dla każdego lokalnego zatwierdzenia, które wprowadziłem od ostatniej synchronizacji z SVN. Czy jest jakiś sposób, aby dcommit
połączyć wszystkie moje ostatnie lokalne zatwierdzenia w jeden commit dla SVN?Połącz lokalne zatwierdzenia Git w jedno zatwierdzenie dla git-svn
Odpowiedz
git rebase remotes/trunk --interactive
powinien zabrać Cię do menu, w którym możesz wybrać commit lub zgnieść je wszystkie w 1 commit, aby uniknąć zanieczyszczenia twojego repozytorium svn. This to naprawdę dobry (ale krótki) zasób dotyczący pracy z git-svn.
Nie, ale można łatwo zgnieść wszystkie poprawki. Na poniższym przykładzie, mam zamiar założyć, jesteś w branży master
odpowiadającej zdalnego trunk
gałęzi i że chcesz squish wszystkie lokalne zobowiązuje razem:
git tag local # create a temporary tag
git reset --hard trunk
git merge --squash local
git commit # write your single commit message here
git svn dcommit
git tag -d local # delete the temporary tag named local
Zamiast tymczasowego tag mogłeś również po prostu użyć reflog (tj użyć [email protected]{1}
zamiast local
)
to jest całkowicie fajne, to całkowicie zmienia mój przepływ pracy, wielkie dzięki –
ten pracował dla mnie - zmiażdżone kilka commity w jeden commit a następnie dcommitted do svn:
http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
Kiedy pracuję z git-svn i chcę serii zatwierdzeń git, które pojawiają się jako pojedyncze zatwierdzenia, pracuję nad gałęzią tematów, a następnie wykonuję niekodowane szybkie przekształcenie merge
w master przed dcommit
-ing.
pierwsze, zmieniają bazę swój oddział przeciwko svn i upewnij się, miejscowy mistrz jest up-to-date:
git svn rebase && git push . remotes/trunk:master
Następnie przełączyć do opanowania, scalania i dcommit:
git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit
To pokaże się jako pojedyncze zatwierdzenie w Subversion, ale nadal będziesz mieć swoją lokalną historię, która doprowadziła cię do tego zatwierdzenia.
+--- Merge commit
V
svn trunk *---*---*-------------------*--- --- ---
\ /
topic branch *---*---*---*---*
Prostszym sposobem mogłoby być (jeśli masz kilka zobowiązuje spiętrzone w systemie lokalnym):
git reset <hash tag of commit till which u need to combine>
git commit -am "your message" // This will create one clubbed commit of all the commit till the hash tag used.
Upewnij się, że dodajesz nowe pliki. "git commit -am" nie dodaje nowych plików samodzielnie. –
Alternatywnie, przy użyciu opcji reset --soft pozostawi zmiany wszystkie etapami, dzięki czemu nie musisz się martwić o dodawanie plików lub używanie -a. – PeterJCLaw
że nie pracuje dla mnie. Używam merge --no-ff --no-commit
ale po popełnić, mam:
svntrunk 54f35e4 [trunk: ahead 336] release 1
dcommitting do trunkwill popełnić wszystkie 336 zobowiązuje.
resetowanie, oznaczanie i zgniatanie, jak opisano w odpowiedzi # 2: Combine local Git commits into one commit for git-svn będzie działać, ale przy następnym "scaleniu" będziesz miał kłopot, aby ponownie zebrać wszystkie poprawki!
jedynym, który pracuje dla mnie:
git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master
uzyskać wszystkie zobowiązuje od mistrza do svn bez utraty historia dla przyszłości połączenia z tego samego polecenia
~ Marcel
- 1. Zatwierdzenie zatwierdzenia kodu JIRA dla 'git'
- 2. Zgubiłem moje zatwierdzenie w GIT. Czy możesz przypadkowo usunąć zatwierdzenia?
- 3. Git cofnij ostatnie zatwierdzenie
- 4. Dziennik zatwierdzania git look dla identyfikatora zatwierdzenia
- 5. Git wypchnij wszystkie zatwierdzenia jako pojedyncze zatwierdzenie z niestandardową wiadomością
- 6. Jak mogę wykonać jedno zatwierdzenie Git bez wcześniejszego?
- 7. Dzielenie pierwszego zatwierdzenia w git
- 8. Jak scalić lokalne modyfikacje ze skrytką git bez dodatkowego zatwierdzenia?
- 9. Jak mogę zobaczyć moje lokalne nieprzerwane zatwierdzenia?
- 10. git: jak "skonsolidować" lokalne zobowiązanie
- 11. git sprawdź czas, w którym zatwierdzono zatwierdzenie
- 12. Znajdź zatwierdzenie przez haszowanie SHA w Git
- 13. Drukuj komunikat zatwierdzenia danego zatwierdzenia w git
- 14. Jak "ponownie otworzyć" ostatnie zatwierdzenie git?
- 15. Git: Jak mogę zmienić zatwierdzenie serwera?
- 16. Otrzymuj rodziców zatwierdzenia scalenia w git
- 17. Cofnij zatwierdzenie git
- 18. Przywrócić poprzednie zatwierdzenie git?
- 19. Całkowicie usuń zatwierdzenie z bazy danych git
- 20. Przeczytaj ostatnie zatwierdzenie git i commit number
- 21. Tymczasowo przełączyć kopię roboczą na konkretny zatwierdzenie Git.
- 22. Użyj funkcji "przeciągnij" lub "połącz", aby scalić lokalne gałęzie?
- 23. Git lokalne lustro
- 24. Numer wydania Jira w komunikacie zatwierdzenia git
- 25. Usuń puste zatwierdzenia w git
- 26. Git: pobranie określonego zatwierdzenia
- 27. Git usuń historię zatwierdzenia
- 28. Git dowiedz się ostatniego zatwierdzenia, pchnąłem
- 29. Git - Co to jest identyfikator zatwierdzenia git?
- 30. Anonimizuj lokalne repozytorium git?
Wydaje się to jak bardzo dobre rozwiązanie. Nie rozumiem, jaki jest wpływ pilota/pnia w poleceniu, a wynikiem końcowym jest to, że wszystkie moje commashed zostały zmiażdżone wewnątrz mistrza. Miałem nadzieję, że zostaną zgnieceni tylko przy wysyłaniu do SVN. Konieczne jest zatwierdzenie SVN po wykonaniu zgniatania. –
@MacRae Linton: Wszystkie twoje zobowiązania muszą zostać zgniecione w mistrzu. Gdyby nie git, nie mieliby możliwości zsynchronizowania repozytoriów git i svn. Kiedy przebijesz się, by wyciągnąć najnowsze zmiany, svn miałoby jeden commit, ale w git miałbyś n commitów. –
@Jason Punyon: Kwestia, na którą napotykam, polega na tym, że po zmiażdżeniu popełnianym przez mistrza staje się trudne ponowne połączenie mistrza z moją rozwijającą się gałęzią. Prawie wszystkie moje zmiany stają się konfliktami seryjnymi, z którymi trzeba sobie poradzić. Czy jest to nieuniknioną konsekwencją oddzielenia mojej rozwijającej się gałęzi od zmiażdżonego pana? –