Shell buffers support three ways of repeating earlier commands. You can use keys like those used for the minibuffer history; these work much as they do in the minibuffer, inserting text from prior commands while point remains always at the end of the buffer. You can move through the buffer to previous inputs in their original place, then resubmit them or copy them to the end. Or you can use a ‘!’-style history reference.
|• Ring:||Fetching commands from the history list.|
|• Copy:||Moving to a command and then copying it.|
|• History References:||Expanding ‘!’-style history references.|