簡介
在使用 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