Git使用教程(五)--Git重写历史

1. git commit –amend

如果仅仅想修改刚刚的提交(最后一个提交),可以使用git commit --amend修改最后一次提交。使用该命令时会弹出对话框(windows下)或者vim编辑界面(linux下)。在弹出界面进行修改,保存后即可用新的提交信息进行提交了。该命令只能修改提交备注信息,对于其他信息无法修改。

2. git reset –soft head^

该命令会回滚最后一个提交,执行一次表示回滚最近一次提交。然后改动会进入暂存区,可以使用git commit -m继续提交即可。

3. git rebase

上面两个命令都是针对最近一次提交,如果想同时修改多个提交,怎么办? git rebase -i 提交号(修改该提交号之后的所有提交) 或 git rebase -i HEAD~3(修改最近三次的提交)。使用了该命令后,会将所有需要修改的commit的提交信息按照时间先后顺序列出来。示例如下:

pick 52e5cd9 .test1
pick 76dfaf3 .test2
pick d178473 .test3

# Rebase 080e4be..d178473 onto 080e4be
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

我们只需要编辑这段脚本即可,git提供了6个命令,具体如下:

  • p(pick):使用提交 (默认)
  • r(reword):使用提交,但要修改提交信息(使用r的提交,在保存并退出该脚本后会依次弹出界面修改每一个提交信息)
  • e(edit):使用提交,但是中断让用户修改,在终端时可以使用git commit --amend来修改
  • s(squash):将当前提交和前一个提交压缩为一个提交,该合并后的提交使用前一个提交的作者信息
  • f(fixup):将当前提交和前一个提交压缩为一个提交,并丢弃当前的提交信息,使用前一个的提交信息
  • x(exec):在处理该提交的时候需要执行的命令语句

4. git filter-branch

该命令能对该仓库的所有提交进行修改,功能非常强大。比如批量修改提交者的信息,如修改所有提交者为zhangsan提交信息为gavincook,邮箱为xx@qq.com,我们可以使用如下命令:

git filter-branch --commit-filter '
    if [ "$GIT_AUTHOR_NAME" = "zhangsan" ]; 
    then
        GIT_AUTHOR_NAME="GavinCook";
        GIT_AUTHOR_EMAIL="xx@qq.com";
        git commit-tree "$@";
    else 
        git commit-tree "$@";
    fi' HEAD

git提供了很多filter类型,更多例子参见:例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值