Here's an option using summarise_each (which makes it easy to apply the changes to all columns except the grouping variables) and toString:
require(dplyr)
have %>%
group_by(ID) %>%
summarise_each(funs(toString))
#Source: local data frame [5 x 3]
#
# ID info1 info2
#1 id101 one first
#2 id102 twoA, twoB second alias A, second alias B
#3 id103 threeA, threeB third alias A, third alias B
#4 id104 four fourth
#5 id105 five fifth
Or, if you want it separated by semicolons, you can use:
have %>%
group_by(ID) %>%
summarise_each(funs(paste(., collapse = "; ")))