diff --git a/CHANGES.md b/CHANGES.md
index 0c70ac62046a1078716d3a9acae73aac2dcf08a5..944a7ae80b5f5e22ba59dfd78aad514bdf3a62cc 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -2,6 +2,8 @@
 
 ## Development ():
 
+* **Bugfix**: Handle git merge errors more cleanly
+
 ## 0.9.4 (11.03.2020):
 
 * **New**: Added support for marking up signatures
diff --git a/editor/views/repository.py b/editor/views/repository.py
index 1dd45c27f7db9a6589d701ffd77369767f2913e3..8b6da686fcf14cc337c172f931080e557ef089c2 100644
--- a/editor/views/repository.py
+++ b/editor/views/repository.py
@@ -51,6 +51,7 @@ def repository(request, rid):
             repo.remotes.origin.fetch()
             repo.remotes.origin.pull()
         except:
+            repo.git.checkout('--')
             errors.append({'msg': _('Fetching changes failed'),
                            'level': 'alert'})
         try:
@@ -107,10 +108,13 @@ def local_merge(request, rid):
         repository.heads.master.checkout()
         repository.remotes.origin.pull()
         repository.heads[request.user.username].checkout()
-        # Merge them in
-        repository.git.merge('master')
-        # Pull any branch changes
-        repository.remotes.origin.pull()
-        # Push all changes
-        repository.remotes.origin.push()
+        try:
+            # Merge them in
+            repository.git.merge('master')
+            # Pull any branch changes
+            repository.remotes.origin.pull()
+            # Push all changes
+            repository.remotes.origin.push()
+        except:
+            repository.git.merge('--abort')
         return HttpResponse('', status=200)