Git 合並或修改線上 commit


簡介

在使用 Git 作為版本控制的時,處於多種原因想修改commit。

  • 如果沒有 push 到服務器的情況,,只是本地進行了 commit,並且沒有進行新的 commit,只需要 git commit --amend
  • 還沒 push 到服務器,但是有了新的 commit,只需要 git reset --soft xxx (xxx有問題那次提交的commit id)
  • 如果已經 push 到了服務器,並且有了多個 commit,而這些 commit 拼接起來才是完整的任務。為了避免太 多commit,推薦將這些 commit 合並成一個。git reset HEAD^1

前兩種情況簡單,這里着重介紹第三種

問題再現

$ git status

commit 1a607dcdc4ab522ce94b395fff5968c5035362b4
Author: 陳子雲 <ever-lose@foxmail.com>
Date:   Tue Mar 21 16:05:34 2017 +0800

    changelog補上

commit a7bd84613243535f5a2de1d1f35037531ea153e3
Author: 陳子雲 <ever-lose@foxmail.com>
Date:   Tue Mar 21 16:03:14 2017 +0800

    標簽合並出錯,html結構被改亂了

commit 8a7c40cd96153f1eb51648f46389c9ef4395c8a9
Author: 陳子雲 <ever-lose@foxmail.com>
Date:   Tue Mar 7 19:37:11 2017 +0800

    chore(package.json): update verison to 2.2.2

在“標簽合並出錯,html 結構被改亂了”之后發現 changelog 還沒寫呢,於是在提交了一發 “changelog補上”,希望能把這兩個提交合並成一個。

解決辦法

# You can do a soft reset and amend the changes to the root commit. 
$ git reset HEAD^1

Unstaged changes after reset:
M	CHANGELOG.md


$ git add ./
$ git commit --amend

[photoGallery df482e8] 標簽合並出錯,html結構被改亂了
 Date: Tue Mar 21 16:03:14 2017 +0800
 2 files changed, 18 insertions(+), 17 deletions(-)

合並成功

$ git log

commit df482e862824c9ba8335f6ca25491231b44fc9e1
Author: 陳子雲 <ever-lose@foxmail.com>
Date:   Tue Mar 21 16:03:14 2017 +0800

    標簽合並出錯,html結構被改亂了

commit 8a7c40cd96153f1eb51648f46389c9ef4395c8a9
Author: 陳子雲 <ever-lose@foxmail.com>
Date:   Tue Mar 7 19:37:11 2017 +0800

    chore(package.json): update verison to 2.2.2

最后 push 時需要加 -f 參數強制推送,若你在 develop 等保護分支上,記得先去去掉 protected branch


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM