diff --git a/cpp/ci_logic.cpp b/cpp/ci_logic.cpp
index 6f13a01..34d447f 100644
--- a/cpp/ci_logic.cpp
+++ b/cpp/ci_logic.cpp
@@ -389,6 +389,10 @@ std::tuple<bool, std::set<std::string>> CiLogic::build_project(std::shared_ptr<P
         proj->upstream_version = base_git_ver + "~" + proj->release->codename;
         sync(proj);
 
+        // Reset changelog after dch (so pending changes aren't committed)
+        reset_changelog(packaging_dir.parent_path() / proj->package->name, changelog);
+        log->append("Reset debian/changelog to HEAD...");
+
         // Update changelog for this release
         update_changelog(packaging_dir, proj->release->codename, proj->upstream_version, std::to_string(proj->ppa_revision), log);
         log->append("Changelog updated, copying the packaging...");
@@ -398,7 +402,7 @@ std::tuple<bool, std::set<std::string>> CiLogic::build_project(std::shared_ptr<P
         copy_directory(packaging_dir, dest_dir);
         log->append("Copied packaging to " + dest_dir.string() + ", copying tarball...");
 
-        // Reset changelog after dchd$ (so local changes aren't committed)
+        // Reset changelog after dch (so local changes aren't committed)
         reset_changelog(packaging_dir.parent_path() / proj->package->name, changelog);
         log->append("Reset debian/changelog to HEAD...");
 
diff --git a/cpp/git_common.cpp b/cpp/git_common.cpp
index da556b2..feb3bd1 100644
--- a/cpp/git_common.cpp
+++ b/cpp/git_common.cpp
@@ -504,6 +504,9 @@ void clone_or_fetch(const std::filesystem::path &repo_dir,
  * reset_changelog to HEAD content
  */
 void reset_changelog(const fs::path &repo_dir, const fs::path &changelog_path) {
+    // Remove the .dch path first
+    std::remove((std::string{changelog_path.string()} + ".dch").c_str());
+
     git_repository *repo = nullptr;
     if (git_repository_open(&repo, repo_dir.c_str()) != 0) {
         const git_error *e = git_error_last();