diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 55945d80bfd185484c9f28b91e873e6a2c51ecf3..37090fe895fa9bdccc7cedbc0bc437acd4fcfc86 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,6 +2,19 @@ default:
   tags: [ public-docker ]
   image: $CI_REGISTRY/easybuild-docker/easybuild-docker/centos8-eb-test:latest
 
+workflow:
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
+      variables:
+        BASE_COMMIT: $CI_MERGE_REQUEST_DIFF_BASE_SHA
+        TIP_COMMIT: $CI_COMMIT_SHA
+    - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
+      when: never
+    - if: '$CI_COMMIT_BRANCH'
+      variables:
+        BASE_COMMIT: $CI_COMMIT_BEFORE_SHA
+        TIP_COMMIT: $CI_COMMIT_SHA
+
 check_style:
   script:
     - export SYSTEMNAME="juwelsbooster" # Make this the default for packages like NVHPC
@@ -18,12 +31,8 @@ check_style:
     - done
     - export EASYBUILD_MODULE_NAMING_SCHEME="FlexibleCustomHierarchicalMNS"
     - faulty=""
-    - TARGET_COMMIT=$(git rev-parse origin/$CI_DEFAULT_BRANCH)
-    # If these 2 are equal that implies an update in-place, not a MR, so the reference SHA has to be the previous one
-    - if [ $TARGET_COMMIT == $CI_COMMIT_SHA ]; then
-    - TARGET_COMMIT=$CI_COMMIT_BEFORE_SHA
-    - fi
-    - eb_list=$(git diff-tree --no-commit-id -r $TARGET_COMMIT $CI_COMMIT_SHA | awk '{print($5,$6)}' | grep -e '^M' -e '^A' | awk '{print($2)}' | { grep -e "eb\$" || $(which true); })
+    - printf "Checking changes between base %s (%s) and tip %s (%s)\n" "$BASE_COMMIT" "$(git describe --all --exclude pipeline/* $BASE_COMMIT 2> /dev/null)" "$TIP_COMMIT" "$(git describe --all --exclude pipeline/* $TIP_COMMIT 2> /dev/null)"
+    - eb_list=$(git diff-tree --no-commit-id -r "$TIP_COMMIT" "$BASE_COMMIT" | awk '$5 ~ /^M|^A/ && $6 ~ /eb$/ {print($6)}')
     - echo "List of files to be checked $eb_list"
     - for i in $eb_list; do
     - echo "Checking $(basename $i) ..."