原文地址: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 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{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 是一个功能强大的版本控制系统,可以帮助开发者追踪代码的变化历史,并在出现问题时进行回滚。下面是 Git 的一些基本概念和使用方法: 1. Git 安装:使用 DNF 包管理器安装 Git,命令为 `dnf install git -y`...
Git是世界上最流行的分布式版本控制系统,它提供了强大的代码版本管理和协作能力。在开发过程中,有时我们需要回滚代码到某个...在实际操作中,务必谨慎,并确保团队成员了解所做的任何回滚操作,以便后续跟踪和维护。
大家在日常开发中,经常会遇到需要将代码切回到之前的某个版本的情况,有可能是需要将代码回滚,也有可能需要查看之前的某个实现。...下面通过这篇文章来学习下Git中的回滚操作,有需要的可以参考借鉴。
* 如果在回滚操作后,出现提交版本报错,可以尝试重新提交更改。 * 如果在执行强制提交命令时,出现错误信息“remote: GitLab: You are not allowed to force push code to a protected branch on this project.”,...
git 删除分支和回滚的实例详解 【git 删除本地分支】 git branch -D br 【git 删除远程分支】 git push origin :br (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id 【本地...
Git代码回滚实践环境搭建环境试验idea示例代码回滚回滚条件创建回滚目标具体操作github地址 环境搭建 1.github上新建仓库:https://github.com/ydfind/git-test.git 2.idea从git新建两个项目,并修改提交代码的...
Git通过一系列命令来实现版本控制的各类操作,包括代码的提交、分支的切换、版本的合并以及版本标记等。 在Git版本控制流程中,首先需要下载并安装Git,支持多种操作系统,如Windows、OSX、Linux。安装完成后,可...
使用git reset和git revert两种方法都有其适用的场景,选择合适的方法取决于具体的需求和操作环境。当我们想要快速撤销错误的提交,而且不会对其他协作者造成影响时,可以使用git reset。但是,如果我们希望保持提交...
Git的核心功能在于它能追踪代码的每一次修改,确保开发者可以随时回滚到之前的版本,同时支持多人协作,避免了多人编辑同一份代码时可能出现的冲突。Git的常用命令包括初始化仓库(`git init`),克隆仓库(`git ...
初衷 由于本人刚到新公司,也是毕业不久,经验不足,经常导致 git 事故发生,特此总结遇坑解决方法,以示后人。 1 本地版本回退 你在本地做了错误的 ...由于本地分支回滚后,版本将落后远程分支,必须使用强制推送
IDEA中使用Git(史上最全最详细)(tedu2)(教学操作视频+源代码) 包含:IDEA中使用Git文档、教学操作视频、代码 1.IDEA集成Git 1.1设置全局git用户名和邮箱 1.2 创建一个SpringBoot项目 1.3 IDEA中设置Git 1.4 设置...
Git允许开发者追踪代码的每一次修改,方便团队协作,回滚到历史版本,以及分支管理等。 一、Git的基本概念 1. **仓库(Repository)**:存储项目所有版本信息的地方,可以本地创建或从远程服务器克隆。 2. **提交...
Git-2.19.2-32-bit.zip这个压缩包包含了适用于32位操作系统的Git版本2.19.2。在这个版本中,Git团队可能修复了之前版本的一些已知问题,增加了新功能,并优化了性能。 Git的核心特性包括版本控制、分支管理、合并...
在IT行业中,版本控制是开发过程中不可或缺的一部分,它允许开发者追踪代码的变化,协同工作,并轻松回滚到以前的版本。Git作为最流行的分布式版本控制系统,被广泛应用在各种开发环境中。Delphi Seattle,作为...
Git的核心功能包括版本控制、分支管理、合并操作以及代码审查。版本控制允许开发者追踪代码的历史变化,随时回滚到任何历史状态。分支管理则鼓励并支持并行开发,每个开发者可以在自己的分支上工作,而不会影响主...
通过 Git,开发者可以跟踪文件和目录的变化,协同编辑代码,并轻松地回滚到以前的版本。以下是对标题和描述中提到的Git基本操作的详细说明: 1. **创建 Git 仓库** 在源代码目录下使用 `git init` 命令可以初始化...
对于32位和64位系统的支持,意味着这个版本的Git不仅适用于较新的64位计算机,还可以在仍使用32位操作系统的旧设备上运行,扩大了用户群体。 总的来说,Git版本2.30.0.2是Git项目管理的重要组成部分,无论你是新手...
GitExtensions是一款广受欢迎的开源Git版本控制系统的可视化工具,它为用户提供了一种直观且高效的界面来管理和操作Git仓库。这款2.50.02版本是GitExtensions的一个更新,旨在提供更好的性能和新特性,同时修复了...