Gimbal Lock Problem

Hello everyone, I have this problem with Quaternions, I tried to pass the rotation of some objects to the rotation of one object, but at some angles I get the Gimbal Lock problem, like when the X rotation is 90, the Y rotation rotates on the Z axis, this is the code:

switch (axis) 
        {
            case Axis.X:
                switch (typeOfEditing)
                {
                    case EditType.Rotation:

                        if (oldRotAxis != transform.localEulerAngles.x)
                        {
                            newRotAxis = transform.localEulerAngles.x - oldRotAxis;

                            objToMove.localRotation = Quaternion.AngleAxis(newRotAxis, Vector3.right) * objToMove.localRotation;
                            follower.localRotation = Quaternion.Euler(newRot);
                            oldRotAxis = transform.localEulerAngles.x;
                        }

                        break;
                }
                break;
            case Axis.Z:
                switch (typeOfEditing)
                {
                    case EditType.Rotation:

                        if (oldRotAxis != -transform.localEulerAngles.x)
                        {
                            newRotAxis = -transform.localEulerAngles.x + oldRotAxis;

                            objToMove.localRotation = Quaternion.AngleAxis(newRotAxis, Vector3.forward) * objToMove.localRotation;
                            follower.localRotation = Quaternion.Euler(newRot);
                            oldRotAxis = -transform.localEulerAngles.x;
                        }

                        break;
                }
                break;
            case Axis.Y:
                switch (typeOfEditing)
                {                    
                    case EditType.Rotation:

                        if (oldRotAxis != transform.localEulerAngles.y)
                        {
                            newRotAxis = transform.localEulerAngles.y - oldRotAxis;

                            objToMove.localRotation = Quaternion.AngleAxis(newRotAxis, Vector3.up) * objToMove.localRotation;
                            follower.localRotation = Quaternion.Euler(newRot);
                            oldRotAxis = transform.localEulerAngles.y;
                        }

                        break;
                }
                break;
        }

Is there a method, to apply a rotation to each axis and evading the Gimbal Lock? I have tried also the Quaternion.Euler but gives me the same results.

Quaternions are a complicated thing…

So I got the answer from this:
_
https://forum.unity.com/threads/understanding-rotations-in-local-and-world-space-quaternions.153330/
_
which I change:

objToMove.localRotation = Quaternion.AngleAxis(newRotAxis, Vector3.up) * objToMove.localRotation;

to:

objToMove.localRotation = objToMove.localRotation * Quaternion.AngleAxis(newRotAxis, Vector3.up);

So pretty much the order actually matters, and now it works.

Can anyone explain why the order matters?