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,邮箱为[email protected],我们可以使用如下命令:

git filter-branch --commit-filter ‘
    if [ "$GIT_AUTHOR_NAME" = "zhangsan" ];
    then
        GIT_AUTHOR_NAME="GavinCook";
        GIT_AUTHOR_EMAIL="[email protected]";
        git commit-tree "[email protected]";
    else
        git commit-tree "[email protected]";
    fi‘ HEAD

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

时间: 2024-11-06 09:31:31

Git使用教程(五)--Git重写历史的相关文章

Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase

上篇博客聊了<git分支管理之rebase 以及 cherry-pick相关操作>本篇博客我们就以Learning Git中的关卡进行展开.下方列举了LearningGit中的 merge.rebase.reset.revert.cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析.后边在聊交互式rebase操作是,不单单给出了LearningGit中的内容,而且给出了真正的Git分支在交互式rebase操作时的具体案例. learngitbranching的地址为:ht

Git 基础教程 之 Git 安装 (windows)

一,安装Git,访问下面网址进行下载 https://www.git-scm.com/download/ 或者 https://pan.baidu.com/s/19imFBVHA2Yibmw1dyzatDg 密码:q650 二,安装后,找到Git Bash,进行简要配置 (右击桌面,一般就能找到) 三,输入: git config --global user.name "hardy" git config --global user.email "[email protect

git 重写历史

重写最后一次提交的commit git commit --amend 修改多个历史 git rebase -i HEAD~3 命令执行后结果如下: pick f7f3f6d changed my name a bit pick 310154e updated README formatting and added blame pick a5f4a0d added cat-file # Rebase 710f0f8..a5f4a0d onto 710f0f8 # # Commands: # p,

GitHub详细教程/Git详细教程

1 Git详细教程 1.1 Git简介 1.1.1 Git是何方神圣? Git是用C语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态).另一个状态可以是不同的文件,也可以是不同的文件内容.举个例子,你可以将文件集合转换到两天之前的状态,或者你可以在生产代码和实验性质的代码之间进行切换.文件集合往往被称作是"源代码".在一个分布版本控制系统中,每个人都有一份完整的源代码(包括源代码所有的历史记录信息),而且可以对这个本地的

Git使用教程(转载)

Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是

Git简单教程

该笔记总结廖雪峰Git教程, 参考网站: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 一. 简介 Git采用分布式版本控制系统, 在此解释分布式与集中式的区别. 集中式版本控制系统: 版本库集中存放在中央服务器中, 工作时需要先请求最新版本, 工作结束后需向中央服务器提交最终版本. 分布式版本控制系统: 所有机器都有一份完整的版本库, 所以其中一个机器损坏不会导致整个项目丢

Git使用教程(转载)

Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网 速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑

【转】git使用教程

Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

Git使用教程:最详细.最傻瓜.最浅显.真正手把手教! 蘇小小 Web项目聚集地 9月16日 作者 | 蘇小小 编辑 | 王久一 来源 | 慕课网 导读:因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料.GitHub虽然有些许改版,但并无大碍. 优质教程请关注微信公众号“Web项目聚集地” 一:Git是什么?Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程: Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remo