diff --git a/README.rst b/README.rst
index 7b06f6ffb422c1c2feb4da36abb0c6abf2189be4..9a14ad83202440ebc9ff4cdc54e4b9bf6124db7f 100644
--- a/README.rst
+++ b/README.rst
@@ -413,7 +413,7 @@ a job, respectively. The full list of variables is as follows:
 `autopep8`                CI_AWE_SKIP_AUTOFORMAT        CI_AWE_RUN_AUTOFORMAT        `templates/autoformat/autopep8.yml`
 `black`                   CI_AWE_SKIP_AUTOFORMAT        CI_AWE_RUN_AUTOFORMAT        `templates/autoformat/black.yml`
 `changed_files_mr`        CI_AWE_SKIP_CHANGED_FILES     CI_AWE_RUN_CHANGED_FILES     `templates/changedfiles/mergerequest.yml`
-`changed_files_push`      CI_AWE_SKIP_CHANGED_FILES     CI_AWE_RUN_CHANGED_FILES     `templates/changedfiles/push.yml`
+`changed_files_branch`    CI_AWE_SKIP_CHANGED_FILES     CI_AWE_RUN_CHANGED_FILES     `templates/changedfiles/branch.yml`
 `conda_build`             CI_AWE_SKIP_CONDA_BUILD_TEST  CI_AWE_RUN_CONDA_BUILD_TEST  `templates/conda/build.yml`
 `conda_test`              CI_AWE_SKIP_CONDA_BUILD_TEST  CI_AWE_RUN_CONDA_BUILD_TEST  `templates/conda/build.yml`
 `conda_upload`            CI_AWE_SKIP_CONDA_UPLOAD      CI_AWE_RUN_CONDA_UPLOAD      `templates/conda/release.yml`
diff --git a/templates/changedfiles/all.yml b/templates/changedfiles/all.yml
index 8e1e773e02b1b409e4ce9631f00e59125f4b631b..5e211159fac5a7193ceecb13fca9ebcbdaef7093 100644
--- a/templates/changedfiles/all.yml
+++ b/templates/changedfiles/all.yml
@@ -1,3 +1,3 @@
 include:
   - local: '/templates/changedfiles/mergerequest.yml'
-  - local: '/templates/changedfiles/push.yml'
+  - local: '/templates/changedfiles/branch.yml'
diff --git a/templates/changedfiles/branch.yml b/templates/changedfiles/branch.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8123b3cf5f99fa3cc8e0da40eb18e9e43e43a889
--- /dev/null
+++ b/templates/changedfiles/branch.yml
@@ -0,0 +1,24 @@
+include:
+  - local: '/templates/changedfiles/_shared.yml'
+
+changed_files_branch:
+  extends: .changed_files
+  variables:
+    CHANGED_FILES_COMPARE_REF: $CI_COMMIT_BEFORE_SHA
+  rules:
+    - if: $CI_AWE_SKIP_CHANGED_FILES
+      when: never
+    - if: $CI_AWE_RUN_CHANGED_FILES
+    - !reference [.primary_ref_jobs, rules]
+  before_script:
+    # An additional check because $CI_COMMIT_BEFORE_SHA is not always set.
+    # See https://stackoverflow.com/a/71601191/2097. We use CI_COMMIT_BEFORE_SHA
+    # when it's set because that will point to the correct commit when you push
+    # multiple commits at once. If it's not set, use the first parent of the
+    # commit (which for merge commits is from the branch where you merged into).
+    - |
+      if [ "$CI_COMMIT_BEFORE_SHA" = "0000000000000000000000000000000000000000"]; then
+          echo "CI_COMMIT_BEFORE_SHA is not set."
+          CHANGED_FILES_COMPARE_REF=$(git rev-parse HEAD^)
+          echo "Using ${CHANGED_FILES_COMPARE_REF} as previous reference instead."
+      fi
diff --git a/templates/changedfiles/push.yml b/templates/changedfiles/push.yml
deleted file mode 100644
index bea5621d80ec493e1f2a26d7dc68d60cd71981f2..0000000000000000000000000000000000000000
--- a/templates/changedfiles/push.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-include:
-  - local: '/templates/changedfiles/_shared.yml'
-
-changed_files_push:
-  extends: .changed_files
-  variables:
-    CHANGED_FILES_COMPARE_REF: $CI_COMMIT_BEFORE_SHA
-  rules:
-    - if: $CI_AWE_SKIP_CHANGED_FILES || $CI_PIPELINE_SOURCE != 'push'
-      when: never
-    - if: $CI_AWE_RUN_CHANGED_FILES
-    - !reference [.primary_ref_jobs, rules]