操作提交记录

修改最近的提交记录

$ 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命令后,可以取消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@{数字}」值以<commit>指令,然后执行reset命令。

把被rebase移动过的分支前面的位置恢复到提交rebase之前的位置,由此取消rebase。

Back To Top

取消最近的reset

$ git reset --hard ORIG_HEAD

ORIG_HEAD是指reset之前的提交,指定之后reset。

高级篇 【改写提交】 遗弃提交
高级篇 【教程3 改写提交!】 3. reset

Back To Top

复制提交

$ git cherry-pick "<commit>"

把指定<commit>的提交复制到现在的分支。

高级篇 【改写提交】 提取提交
高级篇 【教程3 改写提交!】 3. cherry-pick

Back To Top

查找包含特定注解的提交

$ git log --grep "<pattern>"

只显示提交记录里包含指定<pattern>文字的提交。

Back To Top