Если Вы имеете в виду new E()
тогда, это невозможно. И я добавил бы, что это не всегда корректно - как Вы знаете, имеет ли E общественность никакой-args конструктор? Но можно всегда делегировать создание к некоторому другому классу, который знает, как создать экземпляр - это может быть Class<E>
или пользовательский код как это
interface Factory<E>{
E create();
}
class IntegerFactory implements Factory<Integer>{
private static int i = 0;
Integer create() {
return i++;
}
}
У меня есть один резкий ответ. Вы можете создать новую ветку без foo, bar и baz, а затем cherry-pick
bar в новую ветку, а затем git-svn dcommit
эту ветку и удалить ее, когда все готово. Хотя это не выглядит изящным.
Итак, предполагаем, что foo, bar и baz находятся в ветке x, а master не имеет ни одного из них.
git branch y master
git checkout y
git cherry-pick
git svn dcommit
git checkout x
git svn rebase
git branch -dy
Если у мастера есть эти коммиты, вы можете сбросить голову как Sizzler предлагает.
git svn dcommit не может выборочно зафиксировать панель. если вы напрямую зафиксировали foo, bar и baz в своей основной ветке, вам нужно сделать следующее, чтобы получить только bar в svn.
Предположим, что фиксация sha на bar - это что-то вроде 13abc ...
и git log master показывает все ваши 3 коммиты foo, bar и baz.
вам нужно создать ветку из мастера
git branch wip
ветка wip теперь имеет foo, bar и baz
сбросить голову мастера до фиксации перед любым из foo, bar или baz. вы можете сделать это с помощью git reset (прочтите руководство, различия между жесткими, мягкими и смешанными параметрами влияют на незафиксированные изменения в вашем рабочем дереве)
git reset --hard (COMMIT-ID перед foo, bar, baz)
(или)
git reset --hard HEAD ~ 3 (вернуться на 3 версии)
теперь в вашей основной ветке нет ни foo, bar или baz. проверьте с помощью git log.
теперь вы можете выбрать только те коммиты, которые хотите передать в svn из ветки wip в master. так что для получения bar
git cherry-pick wip 13abc (sha of bar commit)
мастер получает только фиксацию бара.
Предлагаемое использование в будущем
Таким образом, для git-svn предпочтительнее не делать коммитов непосредственно в главной ветке, которая отслеживает удаленный svn. выполняйте свою работу в локальных ветвях и выборочно объединяйте их в мастеринг перед фиксацией.