Python 2, 118 107 103 97 9393 92 bytes
s=''
for i in input()+['']+[s]:
while i.find(s):s=s[:-1];print s
while i>s:s+=i[len(s)];print s
Pretty elementary solution. Could use some workInput is given as ['abc', 'abcdef', 'abcfed'], or as ["abc", "abcdef", "abcfed"].
Revision 1: -11 bytes. Credit goes to @xnor for his post on Python golfing tips, and to @Lynn for finding the tip for me, and to me for being smart. Two changes were made: Instead of not s.startswith(i), I used s.find(i), and instead of i!=s I used i>s.
Revision 2: -4 bytes. Credit goes to me realizing I made a really dumb mistake. Instead of using single-tab and double-tab indentation, I used single-space and single-tab indentation.
Revision 3: -6 bytes. Credit goes to @mbomb007 for suggesting to put the whiles on a single line. I also fixed a bug by changing s.find(i) to i.find(s).
Revision 4: -4 bytes. Credit goes to @xnor for realizing that I didn't need to store the input in a variable.
Revision 5: -1 byte. Credit goes to me for realizing that [''] is the same thing as [s] when adding it to the input.