我正在提交。我在vim中輸入了我的提交信息。我現在想起我需要改變一些事情。我意識到還有其他選擇可以實現我想要的功能,但我想知道是否有辦法中止提交,但仍保存我迄今爲止輸入的提交消息。git:中止提交輸入消息
回答
是的。將提交消息寫入不同的文件()。然後退出編輯器而不保存(:q!
)。如果您以前將文件保存到其原始路徑,請刪除所有內容並首先寫入空文件(空的提交消息將中止提交)。
現在,當您準備好提交「for reals」時,請使用您在備用路徑中保存的消息文件。
或者,將提交消息複製到vim的緩衝區中。
值得一提的是,你真的沒有做到這一點,在所有:commit --amend
讓你改變它的製作後提交,所以最簡單的辦法是產生與你有什麼承諾,然後修復它推動之前。您甚至可以在完成提交時處於中斷狀態,reset HEAD~
(重置您的工作副本在提交之前的狀態),修復您的工作副本,然後commit -a -c [email protected]{1}
使用舊的提交消息。
雖然可以中止提交,但另一種方法是將修改爲之後提交。只需提交當前工作,然後進行所需的任何其他更改,即git add
,然後運行git commit --amend
。您將被放回到提交消息編輯器中,並且當您保存時,提交將被修改爲包含其他更改和您的新提交消息。
如果你已經打開VIM寫你的提交信息只是刪除不#和git開始將中止線所提交的
Aborting commit due to empty commit message.
這是特別有用的,當你想中止一個git commit --amend。 – edsko 2014-09-21 09:40:56
這不適用於nano編輯器 – 2015-08-13 12:43:51
問題是如何中止提交但保存提交信息刪除不以#開始的行有效地刪除提交信息,不保存提交信息不知道如何有這麼多upvotes – 2015-12-17 13:54:23
如果你的編輯器可以用一個錯誤代碼退出 - - Git將中止提交。當使用VIM時,輸入
:cq
以非零錯誤代碼退出並中止提交。
這是一個很好的訣竅,修改',否則你將不得不刪除現有的提交信息和':wq'。 – 2015-10-08 00:28:13
好的竅門!然而問題是如何保存提交信息,而不是刪除它。 – 2015-12-17 13:55:58
那麼svn如何做到這一點?它看起來除了退出代碼? – 2016-05-26 22:12:57
@bdonlan回答對於這個問題很好,但我會指出你可能想要一個更好的解決方案的情況。
假設你想添加對上次提交的更改。所以,你做的@bdolan建議:
git add files
git commit --amend
試想一下,編寫新的消息,你後悔將這些文件犯下期間。 問題是你被卡住已保存提交消息和退出編輯器(有或沒有保存)會將這些更改添加到最後一次提交。恢復到您在這些操作之前所處的位置需要您split the last commit - 我敢打賭,您希望避免它。
訣竅是保存並退出編輯器,但它只有以#
開頭的行或根本沒有行。當你退出,你會與消息打招呼:
Aborting commit due to empty commit message.
而且你沒有改變最後一次提交的。
如果我明白你是什麼「說話是個問題,那麼你是不正確的;如下所示:'git commit; vim ....; git commit --amend; git reset HEAD @ {1}'。那就是:如果我想「撤消」修正案,那我就不必拆分先前的提交。修改前的HEAD提交對象保存爲HEAD @ {1}'。另外,zetta已經建議刪除所有非註釋行。 – 2016-06-06 02:09:33
是的,這是可能的。爲了提交,你的編輯器必須將提交消息寫入文件.git/COMMIT_EDITMSG
並以0狀態碼退出。
所以,如果你使用VI/VIM,你可能要執行下列操作...
- 寫你提交信息。
- 保存與
:w
提交信息(默認情況下,這將保存當前內容.git/COMMIT_EDITMSG
) - 退出編輯器錯誤
:cq
- ...你必須做的事情......即使添加/刪除文件到暫存區。
- 繼續與
git commit -eF .git/COMMIT_MESSAGE
的-F /path/to/file
編輯現有的提交信息將填充與/路徑中的任何給定的內容編輯/到/文件。但是,默認情況下,這會立即執行提交,除非您爲編輯另外提供-e
標誌。
這個工作,但不太可取,因爲1)它假設我的CWD是.git文件夾的地方2)我使用[git worktrees](https://git-scm.com/docs/git-worktree),以及使用git worktrees,.git實際上是一個_file_,表示真正的.git文件夾在哪裏。 – 2017-01-02 20:47:46
@AlexanderBird這是不正確的......當你想在步驟5中拿起舊的提交信息時,你只需要指定一個相對路徑(比如說你在'/ foo/bar /'目錄下,相對於項目的根目錄)像'git commit -eF ../../。git/COMMIT_MESSAGE' – 2017-01-05 05:24:11
@AlexanderBird酷,還沒有注意到git中有多個工作樹的特性。 Thx的提示!我相信唯一的缺點就是,你必須對你的頭腦進行總體概述,這使你無法專注於實際的代碼。只是爲了在「我離開的地方」提交提交信息,這有點沉重:) – 2017-01-05 05:29:32
- 1. 在git中輸出給定提交的提交消息
- 2. git提交模板消息
- 3. GIT中從主合併提交消息
- 4. 在git中提交消息前綴
- 5. VSCode中的多行git提交消息
- 6. 在git中修改過去提交的提交消息
- 7. 當VI在屏幕上等待提交消息時,如何停止Git提交?
- 8. 在git中寫入長時間提交消息?
- 9. git突出顯示提交消息
- 10. Git:合併衝突並提交消息
- 11. 防止git合併確認提交消息
- 12. 爲什麼git提示我提交後合併提交消息?
- 13. 拒絕與之前提交的消息相同的消息提交git commit?
- 14. Mecurial:提交自動返回「中止:空提交消息」
- 15. 禁止輸入型提交
- 16. 意外推送提交:更改git提交消息
- 17. 如何通過提交消息找到git提交倉庫?
- 18. git cherry:如何通過提交消息識別等價提交
- 19. 如何編輯推送Git提交的提交消息
- 20. 從提交消息獲取Git提交散列
- 21. Git提交一個提交消息,沒有別的?
- 22. 防止輸入提交表單,允許在輸入中輸入
- 23. 將提交消息自動追加到在Git中提交的文件中
- 24. 爲git輸入提交信息後該怎麼辦?
- 25. svn提交消息
- 26. Launchpad提交消息
- 27. Git停止提示輸入密碼
- 28. git分支撤消提交
- 29. Git撤消上次提交
- 30. 需要撤消GIT提交
注意:使用「:q!」退出vim如果存在自動填充的合併衝突消息,則不會中止提交。相反,提交將繼續,並且消息不會列出哪些文件發生衝突。 – stephenbez 2016-10-17 22:03:51
沒有工作...... :(它仍然完成了提交 – phyatt 2017-01-13 17:16:43