首页 > 编程知识 正文

git删除提交记录(gitlab删除提交记录)

时间:2023-05-06 06:36:57 阅读:79490 作者:4062

作者|隐形外套/p源(id:tech flow 2019 ) ) ) ) ) ) ) ) )。

头像| CSDN从东方集成电路下载

你好。 今天我们来谈谈git的重要功能之一——历史的修正。

我们有时会突然意识到哪里有需要修改,最常见的不应该提交的文件被提交了。 我们希望从git仓库中完全删除,而不是将来的版本。 此时需要修改git之前的历史记录。 这个时候该怎么办?

别着急。 git有很多修改以前的历史提交记录的手段。

我在以前的文章中提到了

修改最后一次提交

,如果你只是想修改最后的提交记录,这很简单。 直接修改想要修改的部分,在提交时添加参数--amend即可。

git commit --amendamend意味着修补程序,可以将此次更改合并到上一个历史记录中,而无需生成新的commit记录。 运行后,将打开vim编辑器,您可以在其中修改上次提交时输入的提示信息。

如果我们使用git log进行检查,就会发现历史记录的修改时间仍然是上次的时间。 就像什么事都没发生一样,安静地修好了。

修改多个信息

--amend易于使用,但只能修改最后的提交信息。 如果我们想修改的提交记录在此之前,该怎么办?

git中没有提供实现这一点的直接工具,但可以使用rebase实现。 我们可以打-i,交互地改变贝斯。 我们可以在任意修改完成后停止,可以添加文件,也可以做其他想做的事情。 但是,因为我们的自变量指向当前分支的历史节点,而不是某个分支,所以需要提供具体的commitid或指针位置。

git rebase -i的功能非常强大,我们几乎可以用它来完成我们想完成的一切。

例如,如果要修改倒数第二次提交,可以执行git rebase -i HEAD~3。 也就是说,使用倒数第三个节点作为基准节点执行基于变量的操作。 此时,git将进入vim窗口,该窗口显示最近三次提交记录。

首先,上面三行是可以更改的三个commit,分别显示了要执行的操作以及commitid和commit message。 缺省情况下,此操作使用pick,即此commit。 关于我们可以执行的操作git,下面也有充分的提示。 其中,pick、edit、squash比较常用。

这次想修改提交记录,所以应该执行edit。 将要修改的commit前的pick更改为edit。 例如,看起来像这样:

完成后,git将自动恢复为选定edit的分支提交后的版本。 进行我们希望的修正。 在这里,我们在第15篇文章中添加了一行“尝试rebase”。 然后使用git add和git commit --amend修改提交结果。

然后执行git rebase --continue以完成剩下的要应用的变更APP应用程序。

一切结束后,使用git show命令查看我们修改的名为bee9ce3的commit的记录。 你会发现这一行增加了。 表明我们的修正成功了。

?from=pc">

顺序变更、合并、拆分

1、顺序变更

我们不仅可以修改某一次 commit 当中的内容,还可以修改这些 commit 的相对顺序,以及可以让它们合并以及拆分。

修改顺序其实很简单,我们只需要人为地修改 rebase -i 之后弹出的 vim 文件即可。比如说原本的记录是:

pick A change Apick B change Bpick C change C

如果我们想要更换顺序,我们只需要修改这个文件即可。比如变成:

pick B change Bpick A change Apick C change C

那么当我们在退出 vim 的时候,git 会首先应用 B commit 的变更,再应用 A 最后应用 C。

2、合并

除此之外,我们还可以合并多个 commit 记录成一个。操作的方法也很简单,就是我们只需要把 pick 修改成 squash。git 会自动把所有 squash 的 commit 记录合并在一起。

pick A change Asquash B change Bsquash C change

3、拆分

有的时候一个 commit 非常巨大,我们可能也会想要将它拆分,其实操作也很简单。比如我们想要把 commit B 拆分成两条,首先,我们在 rebase 的时候将 commit B 前面的 pick 修改成 edit。

pick A change Aedit B change Bpick C change C

当我们退出的时候,我们会进入到 B commit 刚刚提交完的状态。由于我们要做的是拆分 B 这个提交,所以我们需要执行 git reset HEAD^,把上一次提交重置。然后再分别 add 我们想要拆分开来提交的文件。

整个操作如下:

git reset HEAD^git add test/*git ci -m 'add test'git add code/*git ci -m 'update code'git rebase --continue

这样我们就把 commit B 拆分成了两个 commit 插入到了历史记录当中了。

最后的最后,大家需要注意,虽然这些手段在修改记录的时候非常好用。但是如果这些 commit 已经被提交到了远程,我们是不可以直接 git push 同步的。因为 git 会校验我们提交的 hash 值,发现对不上之后会禁止我们的提交。所以如果想要提交到远程的话,只能使用 git push -f 强制覆盖。但是这是一个非常非常危险的操作,如果你 git push -f 了,没有人会知道你到底修改了什么,只建议在自己独有的分支上如此操作,一定一定要谨慎使用。

点分享

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。