Подтвердить что ты не робот

Объединение локального Git совершает одно коммит для git -svn

В настоящее время при запуске git svn dcommit git создается отдельная фиксация в SVN для каждого локального коммита, который я сделал с момента последней синхронизации с SVN. Есть ли способ для dcommit вместо этого объединить все мои последние локальные коммиты в одну фиксацию для SVN?

4b9b3361

Ответ 1

git rebase remotes/trunk --interactive 

должен привести вас в меню, в котором вы можете выбрать коммиты или раздавить их все в 1 commit, чтобы не загрязнять ваш репозиторий svn. Это - действительно хороший (но короткий) ресурс при работе с git -svn.

Ответ 2

Нет, но вы можете легко смириться со всеми коммитами. В следующем примере я предполагаю, что вы находитесь на ветке master, соответствующей удаленной ветке trunk, и хотите, чтобы вы смешали все локальные коммиты вместе:

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

Вместо использования временного тега вы также можете просто использовать reflog (т.е. использовать [email protected]{1} вместо local)

Ответ 3

Когда я работаю с git -svn и хочу, чтобы серия из git собиралась отображаться как одна фиксация, я работаю на ветке темы, а затем выполняю непродолжительное переключение merge в master перед dcommit -ную.

Сначала переустановите ветку на svn и убедитесь, что локальный мастер обновлен:

git svn rebase && git push . remotes/trunk:master

Затем переключитесь на master, merge и dcommit:

git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit

Это будет отображаться как одно коммит в Subversion, но вы все равно будете иметь свою локальную историю, которая заставила бы вас совершить это.

                                       +--- Merge commit
                                       V
svn trunk  *---*---*-------------------*--- --- ---
                    \                 /
topic branch         *---*---*---*---*

Ответ 4

Более простой способ может быть (если у вас в вашей локальной системе много коммитов):

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.

Ответ 6

который не работает для меня. Я использую merge --no-ff --no-commit, но после фиксации я получил:

svntrunk                        54f35e4 [trunk: ahead 336] release 1

dcommitting to trunk будет совершать все 336 коммитов.

сброс, тегирование и раздавливание, как описано в ответе # 2: Объединить локальный Git, зафиксировать в одном коммите для git -svn, будет работать, но следующее "слияние" у вас будет некоторая проблема, чтобы снова собрать все коммиты!

тот, который работает для меня:

git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master

чтобы получить все фиксации от master до svn без потери истории для будущего слияния с той же командой

~ Marcel