你无法修改 Git 的历史记录

转自:http://www.oschina.net/news/26241/you-can-not-change-git-history

有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如删除一个分支,我都担心数据丢失。

不久之前,我在做一些大动作(rebasing)之前,我总是备份整个版本库,以防万一。直到最近我才发现git的历史记录是不可修改的,也就是说你不能更改任何已经发生的事情。你做的任何操作都只是在原来的操作上修改。也就是说,即使你删除了一个分支,修改了一个提交,或者强制重置,你仍然可以回滚这些操作。

让我们来看一些例子:

$ git init
$ touch foo.txt
$ git add foo.txt
$ git commit -m "initial commit"

$ echo ‘new data‘ >> foo.txt
$ git commit -a -m "more stuff added to foo"

你现在看git的历史记录,你可以看到两次提交:
$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit

现在让我们来重置回第一次提交的状态:
$ git reset --hard b7057a9
$ git log
* b7057a9 (HEAD, master) initial commit

这看起来我们是丢掉了我们第二次的提交,没有办法找回来了。但是 reflog 就是用来解决这个问题的。简单的说,它会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会被记录在reflog中。

$ git reflog
b7057a9 [email protected]{0}: reset: moving to b7057a9
98abc5a [email protected]{1}: commit: more stuff added to foo
b7057a9 [email protected]{2}: commit (initial): initial commit

所以,我们要找回我们第二commit,只需要做如下操作:
$ git reset --hard 98abc5a

再来看一下 git 记录:
$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit

所以,如果你因为reset等操作丢失一个提交的时候,你总是可以把它找回来。除非你的操作已经被git当做垃圾处理掉了,一般是30天以后。

你无法修改 Git 的历史记录,布布扣,bubuko.com

时间: 2024-12-11 11:12:48

你无法修改 Git 的历史记录的相关文章

修改GIT已提交的用户名和邮箱

修改GIT已提交的用户名和邮箱 原文:https://help.github.com/en/github/using-git/changing-author-info 说明 要更改在现有提交中记录的名称和/或电子邮件地址,必须重写Git存储库的整个历史. 警告:此操作会破坏存储库的历史记录.如果您正在与其他人协作创建存储库,则重写已发布的历史记录被认为是不好的做法.你应该只在紧急情况下这样做. 使用脚本更改存储库的Git历史记录 使用下面的脚本,更改已提交数据的author或committer.

暴强的命令行git提交历史记录查询

暴强的命令行git提交历史记录查询 虽然会一些git命令行的基本操作,但是偶尔不得不借助一些GUI的工具(SourceTree etc.)来查看git提交的history line,这样可以清楚地看到整个project的提交脉络(包括branch,tag,一些merge/rebase记录等). 偶然间,在github上看到关于git的一条命令: git log --oneline --graph --decorate 我看到--graph参数,隐隐感觉..这像是一条用图形显示log的命令? 于是

idea 修改Git密码和账号方法

IDEA修改git账号及密码的方法: 1.file->settings->passwords 2.重启IDEA 3.执行一次提交或更新 当执行提交或更新之后,idea会自动提示输入账号.密码,如下: 原文地址:https://www.cnblogs.com/feifeicui/p/8423098.html

Git:修改Git Bash默认打开位置(win10)

1.起因 大家写的代码不可能直接保存在根目录下,但是Git Bash每次一打开就是根目录,每次都要切换路径很麻烦. 2.修改Git Bash默认打开位置 1)Git Bash右键 -> 属性 2)修改2栏内容 删除目标中的--cd-to-home 把起始位置改成自己的工作路径 3)重启Git Bash即可 原文地址:https://www.cnblogs.com/ZhengWH/p/10405728.html

window10系统如何修改git全局初始化过的user.name和user.email

最近写了个小项目,放到git上托管,又想把它弄到github上,然后我就搞了个github的账号,在网上弄了一大堆还是没弄好,于是继续写项目,git commit代码的时候就发现问题了: 这是谁??? 原来我在搞github的时候把用户名和邮箱设置错了,不是我原来的那个账号了. 那么如何修改git的用户名和密码呢? 1. 首先要进入 git bash 2. 可以先查看你当前的用户名和邮箱: git config user.name git config user.email 3. 接下来就设置/

Git查看历史记录

查看历史,列出历史提交记录 git log 命令行输出 查看历史记录的简洁的版本  git log --oneline 命令行输出 用 --graph 选项,查看历史中什么时候出现了分支.合并 git log --oneline --graph 命令行输出 用 '--reverse'参数来逆向显示所有日志 git log --reverse --oneline 命令行输出 查找指定用户的提交日志 git log --author=yunshuo --oneline -5 命令行输出 --befo

如何修改Git commit的信息

原文地址: http://xiguada.org/change-git-commit-message Git cimmit信息push后,如何修改,amend可以修改最后一次commit信息,但对于历史提交信息,需要使用rebase命令. 1 比如要修改的commit是倒数第三条,使用下述命令: git rebase -i HEAD~3 2 把pick改为edit 3 然后 :wq 出现如下信息: 4 执行 git commit --amend 修改commit信息 5 退出保存 :wq 6 执

修改git commit 最后一次提交的注释信息 以及如何退出git bash vim编辑器

今天用git commit -m “注释”提交的时候,注释写错了,于是各种查资料开始了和git bash vim的纠缠...(网上的资料我真是没操作成功,不过最后还是摸索出来了) 首先 使用 git commit --amend 命令,(修改最近一次提交的注释信息),会进入到vim 编辑器 然后 你会发现编辑器里你怎么输入都没反应,这是因为vim处在不可编辑状态,按下字母键 c,此时进入编辑状态,可以开始修改注释信息了 在然后 你会发现你怎么都退出不了,回到shell了,然后操作如下: ESC

git暂存修改-git stash

暂存已track文件的修改(不包括untrack的文件,新添加的文件在stash后依然可见,但是新添加的文件在stash后再次修改则不能通过stash pop恢复--因为该命令不暂存未track的文件) git stash 暂存所有修改(包括新添加的文件,即恢复到上一次commit的状态,新添加的文件在stash后不可见,只能通过stash pop后恢复,但是不能添加描述信息message) git stash -a 或者 --all 暂存所有修改(同 -a, 但是可以添加message信息,方