這個問題的答案是社區的努力。編輯現有答案以改善此職位。它目前不接受新的答案或互動。 我在提交消息中寫錯了內容。 如何更改信息?提交尚未被推送。
修改最新的提交消息 git commit-修改 將打開您的編輯器,使您可以更改最近一次提交的提交消息。另外,您可以直接在命令行中使用以下命令設置提交消息: git commit --amend -m“新提交消息” …但是,這可能會使多行提交消息或小的更正變得更加麻煩。 在執行此操作之前,請確保沒有進行任何工作副本更改,否則它們也會被提交。 (未暫存的更改將不會提交。) 更改已經推送到遠程分支的提交消息 如果您已經將提交推送到遠程分支,那麼-在本地修改提交(如上所述)之後,您還需要通過以下方式強制推送提交: git push <遠程> <分支> --force # 要么 git push <遠程> <分支> -f 警告:強行推入將使用本地分支的狀態覆蓋遠程分支。如果遠程分支上有您本地分支中沒有的提交,您將丟失這些提交。 警告:對於修改您已經與其他人共享的提交要謹慎。修改提交實質上會將它們重寫為具有不同的SHA ID,如果其他人擁有您已重寫的舊提交的副本,則會帶來問題。擁有舊提交副本的任何人都需要將其工作與新重寫的提交同步,這有時可能很困難,因此在嘗試重寫共享提交歷史記錄時請確保與他人協調,或者只是避免重寫共享提交共。 執行交互式變基 另一種選擇是使用交互式變基。 這樣,即使不是最新消息,您也可以編輯要更新的任何消息。 為了做一個壁球南瓜,請按照下列步驟操作: // n是您要編輯的最後提交的提交數量 git rebase -i HEAD〜n 壓縮提交後,請選擇e / r來編輯消息: 有關交互式變基的重要說明 當您使用git rebase -i HEAD〜n時,可以提交n次以上。 Git將“收集”最近n次提交中的所有提交,如果在該範圍之間某處存在合併,您也會看到所有提交,因此結果將為n +。 好提示: 如果您需要為多個分支執行此操作,並且在修改內容時可能會遇到衝突,請設置git rerere並讓Git為您自動解決這些衝突。 文獻資料 git-commit(1)手冊頁 git-rebase(1)手冊頁 git-push(1)手冊頁 | git commit --amend -m“您的新消息” | 如果您要修復的提交不是最新提交: git rebase --interactive $ parent_of_flawed_commit 如果您要修復幾個有缺陷的提交,請傳遞其中最早的一個的父提交。 將出現一個編輯器,並列出您提交以來的所有提交。 在您要修復的所有提交之前,將pick更改為reword(或在舊版本的Git上進行編輯)。 保存後,Git將重播列出的提交。 對於您要重新編寫單詞的每次提交,Git都會將您帶回到編輯器中。對於每個要編輯的提交,Git會將您放入外殼。如果您在外殼中: 以您喜歡的任何方式更改提交。 git commit-修改 git rebase-繼續 您將通過執行各種命令的輸出向您解釋此序列的大部分內容。非常簡單;您無需記住它-只需記住git rebase --interactive即可糾正提交,無論提交多久了。 注意,您將不想更改已經推送的提交。也許您這樣做了,但在那種情況下,您將必須格外小心,與可能撤消了您的承諾並在其上完成工作的所有人進行溝通。在有人將基准或重置推送到已發布的分支後,如何恢復/重新同步? | 要修改上一次提交,請進行所需的更改並進行更改,然後運行 git commit-修改 這將在文本編輯器中打開一個文件,代表您的新提交消息。它開始時填充了舊提交消息中的文本。根據需要更改提交消息,然後保存文件並退出編輯器以完成操作。 要修改上一次提交並保持相同的日誌消息,請運行 git commit --amend -C頭 要通過完全刪除之前的提交來修復它,請運行 git reset --hard HEAD ^ 如果要編輯多個提交消息,請運行 git rebase -i HEAD〜commit_count (用要編輯的提交數替換commit_count。)此命令啟動編輯器。將第一個提交(您要更改的提交)標記為“編輯”而不是“選擇”,然後保存並退出編輯器。進行您要提交的更改,然後運行 git commit-修改 git rebase-繼續 注意:您也可以從git commit --amend打開的編輯器中“進行所需的更改” | 就像已經提到過,git commit --amend是覆蓋最後一次提交的方法。注意事項:如果您還想覆蓋文件,則命令為 git commit -a --amend -m“我的新提交消息” | 您也可以為此使用git filter-branch。 git filter-branch -f --msg-filter“ sed's / errror / error /'” $ flawed_commit..HEAD 它不像普通的git commit --amend那樣容易,但是如果您在錯誤的commit消息之後已經進行了一些合併,則它特別有用。 請注意,這將嘗試重寫HEAD和有缺陷的提交之間的每個提交,因此您應該非常明智地選擇msg-filter命令;-) | 我更喜歡這樣: git commit --amend -c <提交ID> 否則,將使用新的提交ID進行新的提交。 | 如果使用的是Git GUI工具,則有一個名為Amend last commit的按鈕。單擊該按鈕,然後它將顯示您的最後提交文件和消息。只需編輯該消息,就可以使用新的提交消息來提交它。 或從控制台/終端使用此命令: git commit -a --amend -m“我的新提交消息” | 您可以使用Git變基。例如,如果要修改回以提交bbc643cd,請運行 $ git rebase bbc643cd ^-交互式 在默認編輯器中,在要修改其提交的行中將“ pick”修改為“ edit”。進行更改,然後使用 $ git add <文件模式> 現在您可以使用 $ git commit-修改 修改提交,然後 $ git rebase-繼續 返回到先前的頭提交。 | 如果您只想修改最後的提交消息,請執行以下操作: git commit-修改 這將使您進入文本編輯器,並更改最後的提交消息。 如果要更改最後三個提交消息,或者直到該點為止的任何提交消息,請向git rebase -i命令提供HEAD〜3: git rebase -i HEAD〜3 | 如果您必須在多個分支上更改舊的提交消息(即,錯誤消息的提交存在於多個分支中),則可能需要使用: git filter-branch -f --msg-filter \ 'sed“ s / <舊消息> / <新消息> / g”'--全部 Git將創建一個用於重寫的臨時目錄,並另外將舊引用備份到refs / original /中。 -f將強制執行該操作。如果臨時目錄已經存在或在refs / original下已經存儲了引用,則這是必需的。如果不是這種情況,則可以刪除此標誌。 -將篩選器分支選項與修訂選項分開。 --all將確保所有分支和標籤都被重寫。 由於備份了舊的引用,因此您可以輕鬆地返回到執行命令之前的狀態。 假設您要恢復主數據庫並在old_master分支中對其進行訪問: git checkout -b old_master refs / original / refs / heads / master | 使用 git commit-修改 要詳細了解它,一個出色的文章是4.重寫Git歷史記錄。它還討論了何時不使用git commit --amend。 | 如果這是您的最後一次提交,則只需修改提交: git commit --amend -o -m“新提交消息” (使用-o(--only)標誌來確保僅更改提交消息) 如果是掩埋式提交,請使用超讚的交互式rebase: git rebase -i @〜9#在文本編輯器中顯示最後9次提交 找到所需的提交,將pick更改為r(reword),然後保存並關閉文件。做完了! 微型Vim教程(或者,如何僅用8次擊鍵3jcwrEscZZ來重新設定基礎): 如果有時間,請運行vimtutor hjkl對應於移動鍵←↓↑→ 所有命令都可以以“範圍”作為前綴,例如3j下移三行 我進入插入模式-您鍵入的文本將出現在文件中 Esc或Ctrlc退出插入模式並返回“正常”模式 你要撤消 Ctrlr重做 dd,dw,dl分別刪除行,字或字母 cc,cw,cl分別更改行,詞或字母(與ddi相同) yy,yw,yl分別複製(“拉”)行,詞或字母 p或P分別粘貼在當前位置之後或之前 :w輸入以保存(寫入)文件 :q!輸入不保存即退出 :wqEnter或ZZ保存並退出 如果您經常編輯文本,請切換到Dvorak鍵盤佈局,學習觸摸式輸入,並學習Vim。值得付出努力嗎?是。 ProTip™:不要害怕嘗試使用“危險”命令來重寫歷史記錄* — Git默認不會刪除您的提交90天;您可以在參考日誌中找到它們: $ git reset @〜3#返回三次提交 $ git reflog c4f708b HEAD @ {0}:重置:移至@〜3 2c52489 HEAD @ {1}:提交:更多更改 4a5246d HEAD @ {2}:提交:進行重要更改 e8571e4 HEAD @ {3}:提交:進行一些更改 ...較早的提交... $ git reset 2c52489 ...而您又回到了起點 *但是要小心--hard和--force之類的選項,它們會丟棄數據。 *另外,請勿在您正在合作的任何分支機構上重寫歷史記錄。 | 修改 你有幾個這裡的選項。你可以做 git commit-修改 只要這是您的最後一次提交。 互動基礎 否則,如果這不是您的最後一次提交,則可以進行交互式變基, git rebase -i [branched_from] [提交前的哈希] 然後,在交互式基礎庫中,您只需向該提交添加編輯。當它出現時,執行git commit --amend並修改提交消息。如果要在該提交點之前回滾,還可以使用git reflog並刪除該提交。然後,您只需再次執行git commit。 | 如果您使用的是Git GUI,則可以修改尚未推送的最後一次提交: 提交/修改上一次提交 | 我盡可能多地使用Git GUI,這使您可以選擇修改最後一次提交: 同樣,git rebase -i origin / master是一個不錯的口頭禪,它將始終向您展示您在master之上所做的提交,並為您提供修改,刪除,重新排序或壓縮的選項。無需先掌握該哈希值。 | 哇,所以有很多方法可以做到這一點。 執行此操作的另一種方法是刪除最後的提交,但保留其更改,以免丟失工作。然後,您可以使用更正後的消息再次提交。看起來像這樣: git reset --soft HEAD〜1 git commit -m'新的和更正的提交消息' 如果忘記添加文件或進行更改,我總是這樣做。 記住要指定--soft而不是--hard,否則將完全丟失該提交。 | 對於正在尋找Windows / Mac GUI來幫助編輯較舊消息(即不僅是最新消息)的任何人,我建議使用Sourcetree。要執行的步驟在圖像下方。 對於尚未推送到遠程的提交: 確保已提交或保存了所有當前更改(例如,因此“文件狀態”標籤中沒有列出文件)-否則將無法正常工作。 在“日誌/歷史記錄”選項卡中,右鍵單擊圖形中您要編輯的提交下方的一條相鄰行的條目,然後選擇“以交互方式重新設置的子級...” 選擇要更改的提交消息的整行(單擊“消息”列)。 單擊“編輯消息”按鈕。 在出現的對話框中根據需要編輯消息,然後單擊“確定”。 如果還有其他提交消息要更改,請重複步驟3-4。 單擊“確定”:重新啟動。如果一切順利,輸出將結束“成功完成”。注意:我有時會因無法創建'project_path / .git / index.lock'而看到失敗:文件存在。嘗試同時修改多個提交消息時。不確定確切的問題是什麼,或者不確定它是否會在Sourcetree的將來版本中解決,但是如果發生這種情況,建議一次將其重新設置為基礎(速度較慢,但似乎更可靠)。 ...或者...對於已經推送的提交: 請遵循此答案中與上述類似的步驟,但是需要從命令行運行另一個命令(git push origin -f)以強制推送分支。我建議您閱讀所有內容並採取必要的警告! | 如果只想編輯最新的提交,請使用: git commit-修改 要么 git commit --amend -m'一行消息' 但是,如果要連續編輯多個提交,則應改用重新基準化: git rebase -i <錯誤提交之前一次提交的哈希> 與上面的文件一樣,在文件中編寫edit / e或其他選項之一,然後單擊保存並退出。 現在,您將處於第一個錯誤的提交。在文件中進行更改,它們將自動為您上演。類型 git commit-修改 保存並退出並輸入 git rebase-繼續 移至下一個選擇,直到完成所有選擇。 請注意,在特定的提交之後,這些操作會更改您的所有SHA哈希。 | 如果只想更改最後一條消息,則應使用--only標誌或其快捷方式-o和commit --amend: git commit --amend -o -m“新提交消息” 這樣可以確保您不會意外地使用分階段的東西來增強您的承諾。當然,最好具有適當的$ EDITOR配置。然後,您可以不使用-m選項,Git將使用舊的預填充提交消息。這樣就可以輕鬆地對其進行編輯。 | 在一行中用新的提交消息更新您的最後一個錯誤的提交消息: git commit --amend -m“您的新提交消息” 或者,嘗試按以下方式重置Git: #您可以將頭重置為n次提交 #更改最後提交消息不是一個好主意, #但您可以將想法分成多個提交 git reset --soft HEAD ^ #它將重置您的最後一次提交。現在輪到你 #可以使用新的提交消息重新提交它。 使用重置將提交拆分為較小的提交 git reset也可以幫助您將一個提交分解為多個提交: #重頭。我正在重置為最後的提交: git reset --soft HEAD ^ #(您可以通過執行HEAD〜2(提交數量)來重置多個提交 #現在,重頭轉向將其拆分為多個提交 git reset HEAD #分別添加和提交文件以進行多次提交:例如 git添加應用程序/ git commit -m“將所有文件添加到應用程序目錄中” git添加配置/ git commit -m“將所有文件添加到配置目錄中” 在這裡,您已成功將上一個提交分為兩個提交。 | 關於這個問題,有很多答案,但是都沒有一個非常詳盡地解釋如何使用Vim更改舊的提交消息。我一直試圖自己做這件事,所以在這裡我將詳細記述我是如何做到的,特別是對那些沒有Vim經驗的人! 我想更改我已經推送到服務器的五個最新提交。這是非常“危險的”,因為如果其他人已經從中退出,則可以通過更改提交消息來弄亂事情。但是,當您在自己的小分支上工作時,請確保沒有人拉過它,您可以按以下方式進行更改: 假設您要更改最近的五個提交,然後在終端中鍵入以下內容: git rebase -i HEAD〜5 * 5是要更改的提交消息數(因此,如果要將第10次更改為最後一次提交,請鍵入10)。 此命令將使您進入Vim,在那裡您可以“編輯”您的提交歷史記錄。您將在頂部看到最後五次提交,如下所示: 選擇 提交消息 除了選擇外,您還需要編寫重寫文字。您可以通過輸入i在Vim中執行此操作。這使您進入插入模式。 (您會看到在底部的INSERT字樣處於插入模式。)對於要更改的提交,請輸入reword而不是pick。 然後,您需要保存並退出此屏幕。您可以先按Esc按鈕進入“命令模式”(如果底部的“插入”一詞消失了,則可以檢查您是否處於命令模式)。然後,您可以通過鍵入:來鍵入命令。保存並退出的命令是wq。因此,如果您輸入:wq,那麼您的位置正確。 然後,Vim會遍歷您要改寫的所有提交消息,您實際上可以在此處更改提交消息。為此,您將進入插入模式,更改提交消息,進入命令模式,然後保存並退出。這樣做五次,您就離開了Vim! 然後,如果您已經推送了錯誤的提交,則需要git push --force覆蓋它們。請記住,執行git push --force是一件非常危險的事情,因此請確保自您推送錯誤的提交以來,沒有人從服務器中拉出! 現在,您已經更改了提交消息! (如您所見,我對Vim並不了解,所以如果我使用錯誤的“行話”來解釋正在發生的事情,請隨時糾正我!) | 您可以使用git-rebase-reword 它旨在以與--amend相同的方式編輯任何提交(不僅僅是最後一次) $ git rebase-reword <提交或引用名> 它是基於對rebase交互操作進行修改以修改提交的名稱:“ reword”。請參閱此帖子和人-部分交互模式- 例子: $ git rebase-reword b68f560 $ git rebase-reword HEAD ^ | 我已經添加了別名reci和recm來重新提交(修改)它。現在我可以使用git recm或git recm -m來做到這一點: $ vim〜/ .gitconfig [別名] ...... cm =提交 reci =提交-修改 recm =提交-修改 ...... | 我意識到自己已經在提交中打錯了。為了撤消操作,我執行了以下操作: git commit --amend -m“ T-1000,高級原型” git push --force 警告:強行推動您的更改將用您的本地分支覆蓋遠程分支。確保您不會覆蓋任何您想要保留的內容。如果其他人與您共享分支,則在強制推送修訂的(重寫的)提交時也要小心,因為如果他們擁有剛重寫的提交的舊副本,則他們需要重寫自己的歷史記錄。 | 我喜歡使用以下內容: git狀態 git添加--all git commit -am“有關更改的消息在這裡” git pull <來源主控> git push <來源主控> | 如果您尚未將代碼推送到遠程分支(GitHub / Bitbucket),則可以在命令行上更改提交消息,如下所示。 git commit --amend -m“您的新消息” 如果您在特定分支上工作,請執行以下操作: git commit --amend -m“分支名稱:新消息” 如果您已經用錯誤的消息推送了代碼,則在更改消息時需要小心。也就是說,在更改提交消息並嘗試再次推送它之後,最終會遇到問題。要使其平滑,請按照下列步驟操作。 請先閱讀我的完整答案,然後再做。 git commit --amend -m“分支名稱:您的新消息” git push -f origin分支名稱#不是最佳實踐。讀下面為什麼? 重要說明:直接使用強制推送時,可能會遇到其他開發人員在同一分支上工作的代碼問題。因此,為了避免這些衝突,您需要在執行強制操作之前從分支中提取代碼推: git commit --amend -m“分支名稱:您的新消息” git pull origin分支名稱 git push -f origin分支名稱 這是更改提交消息(如果已被推送)的最佳實踐。 | 不是您要找的答案?瀏覽標記為git的其他問題git-commit git-rewrite-history修改或提出您自己的問題。