diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c71e441..cfbc07c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,6 +20,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
 
       - name: Collect Workflow Telemetry
         uses: catchpoint/workflow-telemetry-action@v2
@@ -41,6 +43,9 @@ jobs:
       - name: Install dependencies
         run: yarn install --immutable --inline-builds
 
+      - name: Validate PR commits with commitlint
+        run: npx commitlint --from ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} --to ${{ github.event.pull_request.head.sha }} --verbose
+
       - name: Format
         run: yarn format-check
 
diff --git a/.github/workflows/git-checks.yml b/.github/workflows/git-checks.yml
new file mode 100644
index 0000000..1131680
--- /dev/null
+++ b/.github/workflows/git-checks.yml
@@ -0,0 +1,15 @@
+name: Git Checks
+
+on:
+  pull_request:
+    types: [opened, synchronize, reopened, ready_for_review]
+
+jobs:
+  block-fixup:
+    if: github.event.pull_request.draft == false
+    runs-on: ubuntu-20.04
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Block Fixup Commit Merge
+        uses: 13rac1/block-fixup-merge-action@v2.0.0