diff --git a/lib/versioning/hex/index.spec.ts b/lib/versioning/hex/index.spec.ts
index 08eb4b20f30d0694671c48e0bc209f6013298cd7..64514e6027c9440d4f322f4fe15ac5af10999df3 100644
--- a/lib/versioning/hex/index.spec.ts
+++ b/lib/versioning/hex/index.spec.ts
@@ -215,4 +215,14 @@ describe('lib/versioning/hex', () => {
       })
     ).toEqual('== 2.0.7');
   });
+  it('handles short range replace', () => {
+    expect(
+      hexScheme.getNewValue({
+        currentValue: '~> 0.4',
+        rangeStrategy: 'replace',
+        currentVersion: '0.4.2',
+        newVersion: '0.6.0',
+      })
+    ).toEqual('~> 0.6');
+  });
 });
diff --git a/lib/versioning/hex/index.ts b/lib/versioning/hex/index.ts
index 9482680515e7cec9d308386a5b205051128c751c..10e475f605c33a452cddaea20aecadf9d77ffbd8 100644
--- a/lib/versioning/hex/index.ts
+++ b/lib/versioning/hex/index.ts
@@ -76,9 +76,8 @@ const getNewValue = ({
     );
   } else if (/~>\s*(\d+\.\d+)$/.test(currentValue)) {
     newSemver = newSemver.replace(
-      /\^\s*(\d+\.\d+)/,
-      (_str, p1: string) =>
-        `~> ${rangeStrategy === 'bump' ? p1 : p1.slice(0, -2)}`
+      /\^\s*(\d+\.\d+)(\.\d+)?/,
+      (_str, p1: string) => `~> ${p1}`
     );
   } else {
     newSemver = newSemver.replace(/~\s*(\d+\.\d+\.\d)/, '~> $1');