diff --git a/README.md b/README.md
index bfb2577515d2444eb80ffbd8647c8782cce94728..6ba4ac82f4813010eb571e62bc056747576b48e0 100644
--- a/README.md
+++ b/README.md
@@ -479,6 +479,14 @@ or a hunk is staged/unstaged).
 Default value is 1.
 > let g:magit_refresh_gitgutter=[01]
 
+#### g:magit_auto_close
+
+When set to 1, magit buffer automatically closes after a commit if there is
+nothing else to stage (which means that both Staged and Unstaged sections are
+empty).
+Default value is 0.
+> let g:magit_auto_close=[01]
+
 ## Requirements
 
 This part must be refined, I don't see any minimal version for git and vim, but for sure there should be one.
diff --git a/doc/vimagit.txt b/doc/vimagit.txt
index f442774db6d70010617c75cc5d4919f638d4f6dc..985e2e8840eaccf9f51dc0fe7f26a80bc4d85aa1 100644
--- a/doc/vimagit.txt
+++ b/doc/vimagit.txt
@@ -503,6 +503,13 @@ or a hunk is staged/unstaged).
 Default value is 1.
 let g:magit_refresh_gitgutter=[01]
 
+                                                    *vimagit-g:magit_auto_close*
+When set to 1, magit buffer automatically closes after a commit if there is
+nothing else to stage (which means that both Staged and Unstaged sections are
+empty).
+Default value is 0.
+let g:magit_auto_close=[01]
+
 ===============================================================================
 6. FAQ                                                             *vimagit-FAQ*
 
diff --git a/plugin/magit.vim b/plugin/magit.vim
index 9a872406d31e3ef32f481e3fc5adf44a86fb3b9c..a14b2d8d126604400203da7b5b3410fc49731687 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -26,6 +26,7 @@ let g:magit_enabled                = get(g:, 'magit_enabled',
 let g:magit_show_help              = get(g:, 'magit_show_help',                 0)
 let g:magit_default_show_all_files = get(g:, 'magit_default_show_all_files',    1)
 let g:magit_default_fold_level     = get(g:, 'magit_default_fold_level',        1)
+let g:magit_auto_close             = get(g:, 'magit_auto_close',                0)
 let g:magit_auto_foldopen            = get(g:, 'magit_auto_foldopen',               1)
 let g:magit_default_sections       = get(g:, 'magit_default_sections',          ['info', 'global_help', 'commit', 'staged', 'unstaged'])
 let g:magit_discard_untracked_do_delete = get(g:, 'magit_discard_untracked_do_delete',        0)
@@ -374,6 +375,7 @@ function! s:mg_git_commit(mode) abort
 		let b:magit_current_commit_mode=''
 		let b:magit_current_commit_msg=[]
 	endif
+	let b:magit_just_commited = 1
 endfunction
 
 " s:mg_select_file_block: select the whole diff file, relative to the current
@@ -593,6 +595,15 @@ function! magit#update_buffer(...)
 
 	call b:state.update()
 
+	if ( g:magit_auto_close == 1 &&
+				\ b:magit_just_commited == 1 &&
+				\ empty(b:state.get_filenames('staged')) &&
+				\ empty(b:state.get_filenames('unstaged')) )
+		let b:magit_just_commited = 0
+		call magit#close_magit()
+		return
+	endif
+
 	for section in g:magit_default_sections
 		try
 			let func = s:mg_display_functions[section]
@@ -798,6 +809,8 @@ function! magit#show_magit(display, ...)
 
 	let b:magit_diff_context=3
 
+	let b:magit_just_commited = 0
+
 	call magit#utils#setbufnr(bufnr(buffer_name))
 	call magit#sign#init()