I think the problem is that after you attacked, the next time you enter physics process you will met other cases and another animation will start. For example, you press control, so play attack animation, but in next physics process call process call, idle conditions met, so idle is run.
Another thing, Have you tried changing all this:
if Input.is_action_just_pressed("ui_ctrl"):
if anim.current_animation != "combo 1":
anim.play("combo 1")
for this:
if Input.is_action_just_pressed("ui_ctrl"):
anim.current_animation = "combo 1"
You can set animations like that so you don't have to check if animation is already being played.
For your problem, i think you should ad abool variable like is_attacking
which you set to true when start the attack animation, and set to false when finish. If is attacking, then don't try to change animation.