Git重置(reset)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git重置(reset)相关的知识,希望对你有一定的参考价值。

参考技术A reset是Git中常用命令之一,主要是用来撤销暂存区或者回退版本。reset不会改变HEAD的指向,之前指向master,操作完依然指向master。reset改变的是HEAD所指向的游标。这个要和checkout区分开来,checkout主要用来改变HEAD本身,例如切换分支等。

<tree-ish> 如果不提供的话默认是HEAD所指向的提交(就是当前分支的最后一个commit),也可以通过id指定某个提交。
<paths> 指的是文件路径。
-- 用来分隔commit名和文件路径的,防止提交名和路径名冲突。

这条命令执行的效果是用 <tree_ish> 来覆盖暂存区,相当于 git add 的反操作。

--soft 只改变版本库,工作区和暂存区不动
--mixed 改变版本库和暂存区
--hard 改变版本库,暂存区,工作区
--merge 略,暂时没接触到
--keep 略,暂时没接触到

这个命令的执行效果是把分支回退到指定的commit上。至于暂存区和工作区是否变化,取决于给的参数。

第一种和第二种方法最大区别在于是否提供 <paths> , <paths> 指的是文件路径。
从功能上看,第一种只改变暂存区,第二种是一定会改变分支指针的指向(俗称回退)。

如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交

【中文标题】如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交【英文标题】:how to reset un-pushed commit without loosing local changes using git reset 【发布时间】:2022-01-04 08:08:00 【问题描述】:

我想将我的文件推送到一个还没有文件的新存储库(在 GitHub 中)。 我不小心提交了对 GitHub 来说很大的不需要的文件,因此我无法将任何内容推送到存储库。 我想在尝试再次推送之前重置提交。 我对如何正确使用有点困惑 git reset --soft/hard/mixed 当我正在寻找的最终结果是: 在我的本地存储库中没有更改,重置提交中的文件 - 这样我就可以再次选择要提交的文件。

【问题讨论】:

简短答案是git reset HEAD^,但请务必阅读一些关于不同模式的信息here。 我做到了:git reset HEAD~ 比我得到这个:致命:不明确的参数 'HEAD~':未知的修订或路径不在工作树中。 我猜是初次提交? 这可能是初始提交,但问题是我那里有不应该存在的文件,那么我该如何更改初始提交? 重新创建存储库。没有提交意味着没有历史记录,因此您只需要文件夹中的内容即可初始化。如果需要,本地配置和挂钩很容易转移。 【参考方案1】:

你可以用 git reset HEAD 来做到这一点,这个命令会改变你的头部提交

【讨论】:

我这样做了,但我得到了这个:致命的:不明确的参数 'HEAD~':未知的修订或路径不在工作树中。 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Git重置(reset)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交

git学习02之reset命令

Git 重置reset,检出checkout和回滚revert(reverse)有什么区别?

Git 重置reset,检出checkout和回滚revert(reverse)有什么区别?

每天一命令 git reset

Git重置(撤消、丢弃)文件变更