MATL, 12 bytes
:2XN!"G:@tP(
Try it online!
%implicit input, say, 4
: %range, stack is {[1,2,3,4]}
2 %push 2
XN %nchoosek, compute all combinations of [1,2,3,4] taken 2 at a time
%this results in a matrix where each row is a combination, i.e.,
%[1, 2;
1, 3;
1, 4;
2, 3;
2, 4;
3, 4]
! %transpose, because "for" iterates over columns
" %begin for loop
G: %push input and range, stack is now [1,2,3,4]
@t %push "for" index (the column), say, [1;2], twice
P %flip array, so stack is now: {[1,2,3,4],[1;2],[2;1]}
( %assignment index, sets [1,2,3,4]\([1;2])=[2;1],
%resulting in [2,1,3,4]
%implicit end of loop, implicit end of program, print the stack implicitly.