Git——修改历史记录详解

这篇具有很好参考价值的文章主要介绍了Git——修改历史记录详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git

1、修改历史信息

要修改历史信息,可使用--amend参数来修改最后一次Commit的信息,但这仅限于最后一次,如果要改动其他更早的信息,就得使用其他方法了。

前面介绍过的git rebase指令有一种强大的互动模式,接下来的几节内容都是介绍怎样使用这种模式来改动过去的历史记录。首先看一下当前的状况:

git log --oneline

git 修改历史提交记录,Git,git

1.1、启动互动模式

下面使用Rebase指令整理一下:

git rebase -i 4cb958a

-i参数是指要进入Rebase指令的“互动模式”,而后面的4cb958a是指这次Rebase指令的应用范围为“从现在到4cb958a这个Commit”,也就是最开始的那个Commit。这个指令会弹出一个Vim编辑器:
git 修改历史提交记录,Git,git

这里需注意以下两点:

  1. 上面的顺序与git log指令的结果是相反的,但在SourceTree界面中是一样的。
  2. 上面的pick是指“保留这次的Commit,不做改动”,其他指令稍后会介绍。

修改指令,选取两行把pick改成reword(r):
git 修改历史提交记录,Git,git

存档并离开之后,会立即弹出另一个Vim编辑器画面:
git 修改历史提交记录,Git,git

修改第一个Commit信息,然后保存:
git 修改历史提交记录,Git,git

修改第二个Commit信息,然后保存:
git 修改历史提交记录,Git,git

再次查看历史记录:
git 修改历史提交记录,Git,git

1.2、修改Commit信息的影响

看起来好像只是改了信息,只涉及单纯的文字变动,其实没有那么简单。如果仔细看,就会发现那两次Commit的SHA-1值都变了,这两次的Commit已经是全新的Commit对象了。

进行Rebase时,Commit对象并不是剪切、粘贴而已,因为要接的前一个Commit不同(其实时间也不同),所以会重新计算并做出一个新的Commit对象。

这里也是一样,看起来只是改字,但因为Commit对象的信息也会影响SHA-1的计算,所以Git会做出新的Commit对象来替代原来的Commit对象。

不止这样,因为这两个Commit对象被换掉了,在它之后的Commit因为前面的历史信息被改了,所以后面整串的Commit全部都重做新的Commit对象来替代旧的Commit对象。

1.3、取消Rebase

如果想要取消这次的Rebase,只需这样做:

git reset ORIG_HEAD --hard

2、多个Commit合并位一个Commit

新增两个文件并分两次提交:

echo "111" > 1.txt
echo "222" > 2.txt
git add .
git commit 1.txt -m "add 1"
git commit 2.txt -m "add 2"

查看记录:
git 修改历史提交记录,Git,git

如果把这2个Commit合并为一个,就会让Commit看起来更简洁。可以使用互动模式的Rebase来处理:

git rebase -i d249c0f

git 修改历史提交记录,Git,git

这里使用squash指令,把上面的内容改为:

git 修改历史提交记录,Git,git

上面的改动表示cc722b0这个Commit会和前一个05b8f3eCommit合并在一起。

随后修改合并后的Commit信息:
git 修改历史提交记录,Git,git

再次查看记录,合并成功:git 修改历史提交记录,Git,git

3、一个Commit拆解成多个Commit

继续使用上文中的案例,目的是把51422de这个Commit拆分为2个Commit,每个Commit只有一个文件即可。

git rebase -i d249c0f

git 修改历史提交记录,Git,git

这次把要拆解的那个Commit的pick改成edit:
git 修改历史提交记录,Git,git

保存后,Rebase在执行到51422de这个Commit时就会停下来:

git 修改历史提交记录,Git,git

这时,因为要把当前这个Commit拆解成两个Commit,所以要使用Reset指令:

git reset HEAD^

然后查看一下状态:
git 修改历史提交记录,Git,git

可以看到,1.txt和2.txt都被拆解出来放在工作目录中,且处于Untracked状态。还记得怎么Commit文件吗?就是用add + commit二段式指令:

git add .
git commit 1.txt -m "add 1"
git commit 2.txt -m "add 2"

最后执行

git rebase --continue

以完成rebase交互。

查看记录,完成了拆分:
git 修改历史提交记录,Git,git

4、在某些Commit之间插入新的Commit

还是使用上面案例,在(69204dc)add 2和(e061b15)add 1之间插入一个Commit。

git rebase -i d249c0f

git 修改历史提交记录,Git,git

处于Rebase状态的Commit列表与平常看到的记录是相反的,所以如果想在某两个Commit之间再增加Commit,要注意停下来的那个点是不是正确的点。例如,要加在add 2和add 1之间增加Commit,需要停在add 1上:

git 修改历史提交记录,Git,git

保存后,Rebase操作执行,停在add 1的Commit上:
git 修改历史提交记录,Git,git

此时,就可以新增Commit了:

echo "1.5" > 1.5.txt
git add 1.5.txt
git commit 1.5.txt -m "add 1.5"

随后继续执行Rebase操作:

git rebase --continue

查看记录,插入Commit成功:

git 修改历史提交记录,Git,git

5、删除Commit

继续使用上述案例,删除掉add 1.5这个Commit。

要删除Commit很简单,在Rebase的过程中,把原来的pick改成drop,甚至直接将其删掉也可以。

git rebase -i d249c0f

git 修改历史提交记录,Git,git

如果想删掉add 1.5,可以把该行的pick改成drop,或者直接删除掉该行:
git 修改历史提交记录,Git,git

存档、离开后便会开始进行Rebase。然后查看记录,删除成功:
git 修改历史提交记录,Git,git

6、调整Commit的顺序

继续使用上述案例,假设先在要互换add 1和add 2这两个Commit的顺序。

git rebase -i d249c0f

git 修改历史提交记录,Git,git

只需要互换两个记录的顺序即可:
git 修改历史提交记录,Git,git

存档、离开后,Rebase就会继续做它的工作。然后查看记录,顺序已经调整成功:

git 修改历史提交记录,Git,git

7、Revert指令

7.1、取消Commit

继续使用上文案例,假设要取消最后的add 1这个Commit。

git revert HEAD --no-edit

git 修改历史提交记录,Git,git

这样就把最后一次Commit的内容删掉了。虽然文件不见了,但是Commit增加了。

Revert指令是“再做一个新的Commit,来取消你不要的Commit”,所以Commit的数量才会增加。

7.2、取消Revert

如果做出来的Revert不想要了,可用以下几种方式来处理:

1、再开一个Revert

可以再开一个新的Revert,来Revert刚才那个Revert:

git revert HEAD --no-edit

git 修改历史提交记录,Git,git

刚刚被删掉的1.txt又出现了,这样Commit又变多了。

2、直接使用Reset

如果要“砍掉”这个Revert,只需直接使用Reset指令:文章来源地址https://www.toymoban.com/news/detail-849526.html

git reset HEAD^ --hard

8、Reset、Rebase和Revert区别

指令 修改历史记录 说明
Reset 把当前状态设置成某个指定Commit的状态,通常适用于尚未推出去的Commit
Rebase 不管是新增、改动、删除Commit,还是用来整理、编辑还没有推出去的Commit,都相当方便,但通常只适用于尚未推出去的Commit
Revert 新增一个Commit来反转(或说取消)另一个Commit的内容,原来的Commit依旧会保留在历史记录中。虽然会因此而增加Commit数量,但通常比较适用于已经推出去的Commit,或者不允许使用Reset或Rebase来修改历史记录指令的情景

到了这里,关于Git——修改历史记录详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git(五):历史提交与远程仓库修改

    目录 4、查看提交历史 4.1 查看日志详细信息 4.2 查看某次提交信息 4.3 查看更改 5、撤销操作 5.1 取消暂存的文件 5.2 撤销对文件的修改 5.3 撤销远程记录 6 远程仓库的使用 6.1 查看远程仓库 6.2 添加远程仓库 6.3 从远程仓库中抓取与拉取 6.4 同步远程仓库 6.4.1 远程推送 6.4.2 同步

    2024年02月09日
    浏览(38)
  • idea中回退git历史版本并删除历史提交记录

    本篇文章主要介绍git在idea中的回退历史版本,适用场景为代码提错分支、正常回退版本都可适用。 !!!回退前先检查一下本地分支是否和远程分支对应,否则会失败!!! 1,打开idea中git历史提交窗口 快捷键 alt + 9 (有改动则是自己改的快捷键) 2,选择要回退的版本拷贝版

    2024年02月11日
    浏览(44)
  • IDEA、git如何修改历史提交commit的邮箱

    查看提交日志,获取commit ID 进入VI界面,输入i,开始编辑 找到你需要修改的那条commit,将pick修改为edit 按ctrl+c切换到命令模式,输入 保存并退出 将作者修改为lcoal的配置,如果没有local配置,使用global,所以需要注意:确认一下local的配置信息,查询与配置local或者global查看

    2024年02月10日
    浏览(49)
  • VSCode 如何查看git提交的历史记录或逐行记录

    下载两个插件就行了 Git History GitLens 安装成功之后,任意选择一个文件,你鼠标点击哪一行代码,后面都会提示谁在什么时候做了什么,鼠标悬浮提示上便会直接显示作者,版本,时间,点击作者直接可以发邮件,非常方便呢

    2024年02月12日
    浏览(42)
  • 怎么使用Git查看项目中代码的提交历史记录?

    怎么使用Git查看项目中代码的提交历史记录? 可以在git上使用下面这段指令 在git上执行完之后,就可以在桌面上看到打印出来的日志文件了 Readme.log日志文件如下: 对指令中的代码进行解释: git log 是git导出指令 format 是需要导出的数据格式,这里是代码提交时间、提交人员

    2024年02月12日
    浏览(37)
  • vscode插件——git分支管理、查看log提交的历史记录

    不辜负曾经那份热爱 当你觉得vscode用的不顺手时,就多找些插件叭❤ 一、Git Graph 1. 安装 选择红框的\\\"扩展\\\",搜索\\\"Git Graph\\\",直接安装即可。 2. 使用 打开源代码管理菜单,会发现右上角有个小分支图标,直接点击打开Git Graph。也可以直接从底部的Git Graph打开。 打开后,可查

    2024年02月11日
    浏览(59)
  • git主干master分支回滚到历史版本(不会有错误的提交记录)

    master版本,“合并错了”的回滚步骤: (这样做不会有“合并错了”的提交记录)

    2024年01月21日
    浏览(38)
  • 【实战】git 修改之前的提交记录信息(git commit -m ‘...‘)

    不论线上是否已有多次他人提交,只要是修改本地最后一条提交记录信息,都可以按这个来 进入vi编辑器后: 按 i 下方出现’- - 插入 - -‘的提示时,便可编辑提交记录信息 按 ESC ,输入 :wq 保存退出,或 :q! 不保存强制退出 查看提交日志中修改后的信息 查看前面的提交日

    2024年02月15日
    浏览(39)
  • 查看git所有分支的历史修改中改过某段代码的记录。

    如果您要查看 Git 所有分支的历史修改中改过某段代码的记录,可以使用 Git 的 git log 命令和 -S 选项以及你要查找的代码段。 下面是具体的操作步骤: 执行以下命令以在所有分支上搜索代码段的内容: 在上面的命令中, -S \\\"your code snippet\\\" 选项表示搜索某个代码片段, --all 选

    2024年02月11日
    浏览(42)
  • 将项目复制到新电脑之后, 无法通过git 进行拉取代码/查看历史提交记录等操作

    将项目代码整体打包到新环境(新电脑), 在idea/pycharm下载好git相关插件并打开项目之后, 通过git拉取代码失败(gitlab/git/gtee) 最近因工作原因需要讲电脑上的代码迁移到新电脑上, 但是将idea以及git插件等配置好之后, 打开项目, 发现无法查看之前的提交记录, 即使点击刷新也无法查

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包