操作提交記錄
- 修改最近的提交記錄
- 只修改最近的提交記錄的註解
- 修改過去的提交記錄
- 只修改過去提交記錄的註解
- 中途停止rebase
- 查看HEAD的移動記錄
- 查看分支的移動記錄
- 刪除最近的提交
- 放棄rebase
- 取消最近的reset
- 複製在另一個分支的提交
- 查找包含特定註解的提交
修改最近的提交記錄
$ git commit --amend
執行 --amend ,可以覆蓋當前分支最前面的提交。
只修改最近的提交記錄的註解
$ git commit --amend
在索引沒有註冊任何檔案的狀態之下,執行 --amend 重新提交,將會出現填寫註解的畫面,請在此修改註解。
修改過去的提交記錄
$ git rebase -i <commit>
若指定一個提交紀錄後再執行此命令的話,會顯示提交清單的訊息。在其中找出要修改的提交將該行的 "pick" 的文字改成 "edit",之後儲存並退出。
接著,編輯要修改的檔案,儲存檔案之後執行有 --amend 的提交。
$ git commit --amend
最後,加上 --continue 參數,執行 rebase 。
$ git rebase --continue
只修改過去提交記錄的註解
$ git rebase -i <commit>
如果指定一個提交紀錄後再執行此命令的話,會顯示提交清單。在其中找出要修改的提交,將該行的 "pick"改成 "edit",之後儲存並退出。
執行有 --amend 參數的提交。將會顯示填寫註解的畫面,請在此修改註解。
$ git commit --amend
最後,加上 --continue 參數,執行 rebase 。
$ git rebase --continue
中途停止rebase
$ git rebase --abort
加上 --abort,即可以取消 rebase 。
查看HEAD的移動記錄
$ git reflog
執行 reflog 命令,就可以查看過去 HEAD 指向過去的提交清單。
08084a5 HEAD@{0}: commit: 添加pull的說明
99daed2 HEAD@{1}: commit: 添加commit的說明
48eec1d HEAD@{2}: checkout: moving from master to issue1
326fc9f HEAD@{3}: commit: 添加add的說明
48eec1d HEAD@{4}: commit (initial): first commit
這裡會顯示已刪除的提交和藉由 rebase 等所合併的提交。
查看分支的移動記錄
$ git reflog <ref>
在<ref> 指定分支名稱,並執行 reflog 命令,分支過去的提交清單會以下面的方式顯示。
445e0ae issue1@{0}: commit (merge): Merge branch 'master' into issue1
1c904bd issue1@{1}: commit (amend): 查看pull的講解
08084a5 issue1@{2}: commit: 添加pull的說明
99daed2 issue1@{3}: commit: 添加commit的說明
48eec1d issue1@{4}: branch: Created from 48eec1ddf73a7fb508ef664efd6b3d873631742f
這裡將會顯示已刪除的提交和藉著rebase等所匯集的提交。
刪除最近的提交
$ git reset --hard HEAD~
放棄rebase
$ git reset --hard <commit>
首先使用 reflog 命令查找 rebase 以前的提交,確認提交的雜湊值或「HEAD@{數字}」值。以下的記錄是 update2 提交之後,rebase 命令執行2個提交之後所合併的記錄。71bdfbd 以及 HEAD@{4} 是任意的提交。
a51f8d2 HEAD@{0}: rebase -i (finish): returning to refs/heads/dev
a51f8d2 HEAD@{1}: rebase -i (squash): update 1
3a273e1 HEAD@{2}: rebase -i (squash): updating HEAD
f55ef69 HEAD@{3}: checkout: moving from dev to f55ef69
71bdfbd HEAD@{4}: commit: update 2
f55ef69 HEAD@{5}: commit (amend): update 1
找到的雜湊值或「HEAD@{數字}」值填入
這就是把被 rebase 移動過的分支的前頭位置恢復到提交 rebase 之前的位置,藉此取消 rebase。
取消最近的reset
$ git reset --hard ORIG_HEAD
ORIG_HEAD是指reset之前的提交,您可以使用ORIG_HEAD復原之前的reset。
複製在另一個分支的提交
$ git cherry-pick "<commit>"
把指定 <commit> 的提交複製到當前的分支。
尋找包含特定註解的提交
$ git log --grep "<pattern>"
只顯示提交記錄裡包含 <pattern> 所指定文字的提交。