`.*` is a greedy regexp, matching the _longest_ possible match. You need to match the shortest match but match it globally on the whole line. Try
`sed 's/-[^:-]*:/:/g' 1.file > 2.file`
The character class `[^:-]` matches anything _except_ colon and dash (and maybe it should match anything except colon only), so the regexp says "dash followed by any number of non-dash, non-colon characters followed by a colon". It then replaces that with a colon (since you wanted to keep that) and does the replacement globally (the trailing `g`) on the line. If you omit the `g`, only the first instance would be replaced.