了解“ git重置 - hard”

技术标签: git

假设我有一个git仓库,以下对主人的承诺:a,b,c,D。换句话说,丢弃了B,C和D的更改。我很确定 git reset --hard 会这样做。但是,我想选择性地重新涂抹一些废弃的补丁(git cherry-pick 我想要的是,对吗?)所以我的具体问题是:

  1. git reset --hard 从提交历史记录中删除任何内容?如果我将主人重置为A,B,C和D会在存储库中闲逛吗?

  2. git cherry-pick 请允许我做我上面描述的事情,还是误解了?

看答案

理解 git reset 正确地,您需要所有这些信息:

  • 从某种意义上说,委托本身存在于任何分支名称之外。

    当您进行提交时,GIT将其分配为唯一的哈希ID。您在其中制作商店的新提交是您当前在您完成的订单时的hash iD。我们可以使用这些哈希ID将其链接在一起:

    A <-B <-C <-D
    

    我们说每个提交 指着 以前的提交。 (因为以前没有提交 A,它没有指向任何地方。如果有 一个之前 A,试想一下链条进一步回去。最终必须结束,因为没有GIT存储库有无限数量的提交,并且该图受到约束。)

  • 但是,分支名称,喜欢 master, 保存 提交。如果有 订单的名称 D 以上, D 有可能被Git的清理和清除的危险 垃圾收集器,似乎没用。因此,我们添加了一个外部名称以指向 D:

    A <-B <-C <-D   <-- master
    

    现在git知道 D 正在使用。自从 D 指着 C,git知道 C 在历史上正在使用,等等。

  • 特殊名称 HEAD 通常包含 分支的名称。分支名称本身,例如 master,具有确定某些特定承诺的通常作用(D),从而保持 D 活。名字 HEAD 用来告诉git哪个分支名称应被视为 当前的 分支。

  • 当您与 git commit,git使用的内容 指数 做新的犯罪。该索引(也称为登台区域,有时称为缓存),位于“当前(头)提交和工作树之间”。因此,当前提交的每个文件都有(最多) 版本:其中一个 HEAD,索引中的一个,以及工作树中的一个。

    您可以在索引和工作树之间来回复制文件,您可以复制文件 出去 任何对索引的承诺;但是提交是只读的,因此您不能将索引从索引复制到现有的提交中。你只能做一个 新的 从索引提交。

  • 当然,工作树以正常的可读/写入方式保存您的文件,而不是某些特殊的gitty格式(如提交本身和索引中所用)。

什么 git reset 做(在普通模式下, --soft, --mixed, 和 --hard)最多要做三个工作:

  1. 通过更改某些内容(通常是当前分支的存储的哈希ID) HEAD。它 总是 这样做,但是如果您使用 HEAD 作为新值,新值与旧值相同,因此实际上没有任何变化。 (如果在这里停止 --soft.)
  2. 重新设置索引。这部分是可选的:它仅发生 --mixed--hard。 (如果在这里停止 --mixed。)重置意味着 复制(现在重新设置)中的所有内容 HEAD 进入索引。
  3. 重新设置工作树。这部分是可选的:它仅发生 --hard。重置意味着 将所有内容从(现在重新设置的)索引复制到工作树中。

现在,您提到您想将事情汇回他们在提交期间的状态 A。定义 事物 正确的问题是这里的问题。我们可以做 分店名称 指点 A:

A   <-- master (HEAD)
 \
  B--C--D

这是通过第一个动作来完成的,总是发生: git reset <hash of A> 成为当前的分支机构 - 大概 master - 要提交 A,即使您使用 --soft。使用 --mixed 或者 --hard 还将重新设置索引,或索引和工作树。

这立即取消保护 B, C, 和 D, 尽管。因此,您应该首先通过添加名称(分支或标签)来保护它们 D,这将保护它。 D 然后将保护 C,这将保护 B.

同时,您在这里所做的是将分支名称“向后移动”。没有天生的 错误的 这样,但是其他人和流程可能不会期望发生这种情况。通常仅分支名称“向前移动”(我们补充 新的 提交并将分支名称指向最新的名称,这使我们能够继续访问仍然受到保护的旧提交)。所以这 可能 不是正确的方法。 (如果其他使用此分支名称的人都同意它以这种方式移动,那很好。如果不是,则不是。)

你提到 git cherry-pick。什么 git cherry-pick 做一个犯罪 进入 更改(承诺本身就是完整的快照,跑步时节省了索引中的所有内容 git commit)。然后,无论您身在何处,它都试图应用更改。例如,假设我们完全做上述 git reset --hard,在制作新名字之后 save 指点 D:

A   <-- master (HEAD)
 \
  B--C--D   <-- save

您现在可以运行 git cherry-pick <hash-of-C> 或者 git cherry-pick save~1 (这两个都将确定提交 C)。然后,git将比较提交的内容 C 提交的内容 B。无论发生什么变化,GIT都会尝试将这些更改为您的索引和工作树的内容。如果一切成功,git将提交结果:

A--C'   <-- master (HEAD)
 \
  B--C--D   <-- save

在这里,我称新提交 C' 因为它类似于 C 很多:也一样 变化 作为 C (但是在另一个基础上!),并且具有相同的 提交消息 作为 C (通常带有“从...挑选的樱桃”注释)。

当您完成樱桃的挑选时,完全没有用 B 通过 D,您可以简单地删除保持它们的名称并易于找到的名称。在这一点上,这三个提交确实确实如此(嗯,也许1)有资格被垃圾取出 git gc 运行。


1Git尝试 真的很难 不要输。结果,有很多方法可以提交 惯于 迅速收集,包括“回流”和年龄。默认情况下,从未修剪过14天以下的提交。在回流条目中的提交也没有修剪;回流条目本身通常至少呆30天。删除 save 名称抛出了回流 save 本身,但是倒流 HEADmaster 可能会保留一段时间。


智能推荐

恢复git reset --hard之前的commit号

1. 依据:只要是在git库中提交过的commit,在.git/logs/refs/heads/分支名 文件中都有记录。所以只要拿到commit号,即使通过git reset --hard回滚到之前的commit号,也能够恢复回来。 2. 过程: 2.1 创建新分支:test_branch。 2.2 编辑文件,提交三次,用于测试。 此时,文件./git/logs/refs/heads/test_b...

Git 回退三大参数 --hard --mixed --soft

Git 回退三大参数 --hard --mixed --soft 从工作区到分支范围:hard > mixed > soft 一、git reset --hard [ID] 范围:工作区到暂存区再到分支(都变到提交的日志ID(默认最近一次)) 示例: 现在我成功提交了两次作业,现在我需要回退到第一次作业的状态。 回退版本 -->“第一次作业的ID” <...

git 恢复未add文件 执行了reset --hard

如果使用Jetbrains系列产品,那恭喜你,可以恢复,步骤: 1. 项目右击,选择local history -> show history 2. 选择恢复的时间点,右键,revert即可。   如果你只依赖git,是无法恢复的,只能哭了......

git reset --hard 操作后的数据恢复

https://www.cnblogs.com/dongcanliang/p/11162235.html 在进行正文之前先简单介绍下git reset 命令 git reset git reset 命令用于改变当前的仓库状态,简单的场景用例:假设一次修改了两个文件,然而需要对这两个文件分别进行两次提交,在进行缓存操作时(git add),不小心将两个文件都进行了缓存,此时我们需...

git reset --hard HEAD 后恢复暂存区文件

git reset --hard HEAD 后恢复暂存区文件 1、参考资料 git reset–hard后恢复暂存区文件 git reset–hard后恢复暂存区(未提交)文件 关于git reset --hard这个命令的惨痛教训 2、前言 我 TM 脑子被驴踢了,添加了一些文件,没有配置 .gitignore 文件直接执行了 git add .,导致一些本不该添加到 g...

猜你喜欢

关于git reset中soft mixed hard的理解

1 soft:重置到指定的commit成功后的状态,而后面的commit内容和工作区的内容,将作为绿色内容-未提交 (1) (2)reset到测试1 (3)测试1后的内容显示为绿色   2 mixed:完全保留工作区,彻底清除暂存区 3 hard:重置到指定commit后的数据,后面的commit以及工作区的内容将被清空 (1) (2)reset hard...

Git reset中关于soft、mixed、hard参数的使用

使用git时,有时会遇到回退版本的问题,此时,reset命令就能派上用场。reset有3中模式,soft、mixed、hard,充分理解它们的不同,可以更好的使用它们。 在充分使用前,需要先理解git的本地组成部分 git的本地组成 git的本地组成有3部分,分别是工作区、暂存区、本地仓库 另外,还需要理解HEAD头指针 1、工作区 通俗的讲,就是电脑中的目录,就像下面图片中表示的一样 2、暂存区...

The Design of Everyday Things 读书笔记

  近日抽闲读了老师推荐已久的这部设计史上的著作——唐纳德诺曼的The Design of Everyday Things,中文译名是《设计心理学》,全套共四部,我读了第一部,总的感觉就一个词——恍然大悟!被作者的细心以及擅于思考所折服,他能够抓住生活中很多人习以为常的不方便和小错误,从而解释糟糕的设计可能带给我们的麻烦甚至灾难。...

博客,记录一点一滴,终将汇聚成星辰大海

博客,记录一点一滴,终将汇聚成星辰大海 目录 写博客的好处: 要怎么写博客: 写博客的好处: 【1】我认为写博客能充当自己的资料库,你能随时翻阅你之前学的所有东西,你是否有这样的经历,明明自己之前学过这方面的内容,而且还挺熟悉,但怎么都记不起来具体细节,这时候你的资料库就能最快帮你回忆起你学的东西。 【2】把自己学到的经验,分享出来,自己之前踩到的所有坑都记录下来,当读者读你的博客时,就能少走一些...

一个好玩的工具BeEF介绍及未来要实验

beef BeEF-XSS是一款非常强大的web框架攻击平台,集成了许多payload,可以实现许多功能 BeEF-XSS可以说是最强大的XSS漏洞利用工具,可以收集浏览器信息、键盘记录、社会工程等 总之就是使用beef这个工具来利用xss漏洞的 beef安装 我在kail虚拟机上安装的,很简单的在终端输入一句命令sudo apt setup beef-xss,然后安装成功设置密码就行了,因为之后...

问答精选

Applying stats.percentileofscore to every row by column

df= I need a new column with the percentile score for each element with respect to the column. The final answer should look like this. I want the output of the stats.percentileofscore() function to be...

C - Creating node with multiple children by function - segmentation fault

I want to create tree with multiple children and create every node with a function. Here is my structure for node: And here is my function to create new node (with four children): When I run this func...

How to get all secrets in one call Azure key vault

I am using sample code explain here https://github.com/Azure-Samples/app-service-msi-keyvault-dotnet but they only explained how can we get single secrete not list of secrete. so to get all secrete I'...

increase eclipse IDE font size

I am using Eclipse I would like to increase the font size of the IDE, not just the font of the editor. Is there any way I can do that? I haven't been able to find a solution for this yet. you can try ...

Generating Guid by database automatically

It regards Entity Framework 6 but maybe it isn’t related to the version. I have some class which has Guid Id but by inheritance. Right now I would like to change this model to auto generate Id b...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答