操作提交記錄

修改最近的提交記錄

$ git commit --amend

執行 --amend ,可以覆蓋當前分支最前面的提交。

進階篇 【改寫提交】 修改最近的提交
進階篇 【教學3 改寫提交】 1. Commit --amend

Back To Top

只修改最近的提交記錄的註解

$ git commit --amend

在索引沒有註冊任何檔案的狀態之下,執行 --amend 重新提交,將會出現填寫註解的畫面,請在此修改註解。

進階篇 【改寫提交】 修改最近的提交
進階篇 【教學3 改寫提交】 1. Commit --amend

Back To Top

修改過去的提交記錄

$ git rebase -i <commit>

若指定一個提交紀錄後再執行此命令的話,會顯示提交清單的訊息。在其中找出要修改的提交將該行的 "pick" 的文字改成 "edit",之後儲存並退出。

接著,編輯要修改的檔案,儲存檔案之後執行有 --amend 的提交。

$ git commit --amend

最後,加上 --continue 參數,執行 rebase 。

$ git rebase --continue

進階篇 【改寫提交】 改寫提交的歷史記錄
進階篇 【教程3 改寫提交】 6. 使用rebase -i 修改提交

Back To Top

只修改過去提交記錄的註解

$ git rebase -i <commit>

如果指定一個提交紀錄後再執行此命令的話,會顯示提交清單。在其中找出要修改的提交,將該行的 "pick"改成 "edit",之後儲存並退出。

執行有 --amend 參數的提交。將會顯示填寫註解的畫面,請在此修改註解。

$ git commit --amend

最後,加上 --continue 參數,執行 rebase 。

$ git rebase --continue

進階篇 【改寫提交】 改寫提交的歷史記錄
進階篇 【教程3 改寫提交】 6. 使用rebase -i 修改提交

Back To Top

中途停止rebase

$ git rebase --abort

加上 --abort,即可以取消 rebase 。

Back To Top

查看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 等所合併的提交。

Back To Top

查看分支的移動記錄

$ 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等所匯集的提交。

Back To Top

刪除最近的提交

$ git reset --hard HEAD~

進階篇 【改寫提交】 放棄提交
進階篇 【教學3 改寫提交】 3. Reset

Back To Top

放棄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@{數字}」值填入 ,然後執行 reset 命令。

這就是把被 rebase 移動過的分支的前頭位置恢復到提交 rebase 之前的位置,藉此取消 rebase。

Back To Top

取消最近的reset

$ git reset --hard ORIG_HEAD

ORIG_HEAD是指reset之前的提交,您可以使用ORIG_HEAD復原之前的reset。

進階篇【改寫提交】 放棄提交
進階篇 【教學3 改寫提交】 3. Reset

Back To Top

複製在另一個分支的提交

$ git cherry-pick "<commit>"

把指定 <commit> 的提交複製到當前的分支。

進階篇 【改寫提交】 提取提交
進階篇 【教學3 改寫提交】 4. Cherry-pick

Back To Top

尋找包含特定註解的提交

$ git log --grep "<pattern>"

只顯示提交記錄裡包含 <pattern> 所指定文字的提交。

Back To Top