diff --git a/aegisub/src/subs_controller.cpp b/aegisub/src/subs_controller.cpp
index bd4ccd072ce72686361bd453c2c46ecfd823dfd8..4720fd5d2f95e3b7d4af772974c742bf1d504a1e 100644
--- a/aegisub/src/subs_controller.cpp
+++ b/aegisub/src/subs_controller.cpp
@@ -308,9 +308,7 @@ void SubsController::OnCommit(AssFileCommit c) {
 void SubsController::Undo() {
 	if (undo_stack.size() <= 1) return;
 
-	redo_stack.emplace_back(AssFile(), undo_stack.back().undo_description, commit_id);
-	context->ass->swap(redo_stack.back().file);
-	undo_stack.pop_back();
+	redo_stack.splice(redo_stack.end(), undo_stack, std::prev(undo_stack.end()));
 	*context->ass = undo_stack.back().file;
 	commit_id = undo_stack.back().commit_id;