Git: Как зафиксировать в ветке SVN после ребазинга? - PullRequest
6 голосов
/ 17 февраля 2010

У меня проблема с веткой SVN. Я сделал проверку с git checkout -t -b stable svn/stable. Затем я сделал слияние с git rebase master. После этого я попытался зафиксировать изменения слияния в удаленной ветке с git svn dcommit

Но теперь кажется, что Git поместил изменения в ствол вместо ветви: (

И git status говорит мне:

# On branch stable
# Your branch and 'svn/stable' have diverged,
# and have 218 and 52 different commit(s) each, respectively.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
...

Кто-нибудь знает, что я сделал неправильно и как это сделать правильно?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Я недавно столкнулся с той же ошибкой. Дело в том, что когда вы перебазируете в master, он сначала сбрасывает текущую ветвь в master, а затем применяет коммиты, объединяемые с ним. Но ваша основная ветка связана с svn/trunk, и, таким образом, новая ветвь сброса также становится связанной с ней. Так что git-svn on dcommit считает, что коммиты «вставляются» в svn/trunk, когда вы их нажимаете.

Решение состоит в том, чтобы использовать git merge --no-ff вместо git rebase. Или использовать возможности слияния самой Subversion.

0 голосов
/ 18 февраля 2010

Теперь это работает, я сделал это так:

   git checkout master
   git svn rebase
   git checkout --track -b svn_stable svn/stable
   git merge --squash master
   git commit -m "Bring stable up-to-date with trunk" 
   git svn dcommit --dry-run
   git svn dcommit

Слияние было намного проще, чем перебазирование с обработкой конфликтов.

В этой попытке я забыл использовать --no-ff, это вызывает коммит для каждого слияния, верно?

Спасибо за вашу помощь:)

...