如何将 Git 托管项目中的所有本地更改恢复到以前的状态?

这篇具有很好参考价值的文章主要介绍了如何将 Git 托管项目中的所有本地更改恢复到以前的状态?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问:

我运行了 git status,它告诉我一切都是最新的,并且没有本地更改。

然后我连续做了几次改变,意识到我想把所有的东西都扔掉,回到我原来的状态。这个命令会为我做吗?

git reset --hard HEAD

答1:

huntsbot.com – 高效赚钱,自由工作

要恢复对工作副本所做的更改,请执行以下操作:

git checkout .

或者等效地,对于 git version >= 2.23:

git restore .

要恢复对索引所做的更改(即您添加的),请执行此操作。警告这会将所有未推送的提交重置为 master!:

git reset

要恢复您已提交的更改:

git revert  

要删除未跟踪的文件(例如,新文件、生成的文件):

git clean -f

或未跟踪的目录(例如,新的或自动生成的目录):

git clean -fd

fwiw 这么长时间后,git checkout path/to/file 只会将本地更改还原为 path/to/file

+1 在下面的答案中还提到 git clean -f (删除未跟踪的更改)和 -fd (也删除未跟踪的目录)

git checkout . 和 git reset [--hard HEAD] 不起作用,我必须执行 git clean -fd 才能恢复我的更改。

git reset 不会重置您的更改,git reset --hard 会这样做。

我项目根目录中的 git checkout . 仅适用于该目录中的文件,我也必须执行 git checkout * 才能恢复所有子目录。

答2:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

注意:您可能还想运行

git clean -fd

作为

git reset --hard

不会删除未跟踪的文件,其中 git-clean 将从跟踪的根目录中删除不在 git 跟踪下的任何文件。警告 - 小心这个!首先用 git-clean 运行一次空运行,看看它会删除什么是很有帮助的。

当您收到错误消息时,这也特别有用

~"performing this command will cause an un-tracked file to be overwritten"

做几件事时可能会发生这种情况,当您和您的朋友都添加了同名的新文件时更新工作副本,但他首先将其提交到源代码管理中,并且您不在乎删除未跟踪的副本.

在这种情况下,进行试运行还有助于向您显示将被覆盖的文件列表。

文件清理命令是“git clean -f”。使用“git clean -d”删除未跟踪的目录

git clean -fd(-d 需要强制)

-n 或 --dry-run 是空运行的标志。

git clean -ffd 如果您的 git 存储库中有另一个 git 存储库。如果没有 double f,它将不会被删除。

答3:

huntsbot.com – 高效赚钱,自由工作

重新克隆

GIT=$(git rev-parse --show-toplevel)
cd $GIT/..
rm -rf $GIT
git clone ...

✅ 删除本地的、非推送的提交

✅ 还原您对跟踪文件所做的更改

✅ 恢复您删除的跟踪文件

✅ 删除 .gitignore 中列出的文件/目录(如构建文件)

✅ 删除未跟踪且不在 .gitignore 中的文件/目录

😀 你不会忘记这种方法

😔 浪费带宽

以下是我每天忘记的其他命令。

清洁和重置

git clean --force -d -x
git reset --hard

❌ 删除本地的、非推送的提交

✅ 还原您对跟踪文件所做的更改

✅ 恢复您删除的跟踪文件

✅ 删除 .gitignore 中列出的文件/目录(如构建文件)

✅ 删除未跟踪且不在 .gitignore 中的文件/目录

干净的

git clean --force -d -x

❌ 删除本地的、非推送的提交

❌ 还原您对跟踪文件所做的更改

❌恢复您删除的跟踪文件

✅ 删除 .gitignore 中列出的文件/目录(如构建文件)

✅ 删除未跟踪且不在 .gitignore 中的文件/目录

重置

git reset --hard

❌ 删除本地的、非推送的提交

✅ 还原您对跟踪文件所做的更改

✅ 恢复您删除的跟踪文件

❌ 删除 .gitignore 中列出的文件/目录(如构建文件)

❌ 删除未跟踪且不在 .gitignore 中的文件/目录

笔记

确认以上所有的测试用例(使用 bash 或 sh):

mkdir project
cd project
git init
echo '*.built' > .gitignore
echo 'CODE' > a.sourceCode
mkdir b
echo 'CODE' > b/b.sourceCode
cp -r b c
git add .
git commit -m 'Initial checkin'
echo 'NEW FEATURE' >> a.sourceCode
cp a.sourceCode a.built
rm -rf c
echo 'CODE' > 'd.sourceCode'

也可以看看

git revert 进行新的提交以撤消先前的提交

git checkout 及时返回到之前的提交(可能需要先运行上面的命令)

git stash 与上面的 git reset 相同,但你可以撤消它

我很确定,第一个选项(重新克隆)实际上确实“删除了本地、非推送的提交”:)

@styfle ✅ 是它做的事情,❌ 是它不做的事情

@FullDecent 读起来有点令人困惑。 “❌ 不删除本地的、非推送的提交”。这意味着它不会删除。双重否定意味着它确实删除了?

关于 git clean -f -d -x 中的 -x 标志:如果指定了 -x 选项,也会删除忽略的文件。例如,这对于删除所有构建产品很有用。-来自 GIT 文档

@calyxofheld 它并没有说它会删除未跟踪的文件。 ❌ 表示“它不做”,✅ 表示它做。在重置部分,我看到“❌删除未跟踪且不在 .gitignore 中的文件/目录”。

答4:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

如果您想恢复所有更改并与当前的远程主服务器保持同步(例如,您发现主 HEAD 自从您分支它并且您的推送被“拒绝”后已经向前移动)您可以使用

git fetch  # will fetch the latest changes on the remote
git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.

在 git reset --hard origin/master 中指定 origin 似乎很重要(有效)——没有它(即 git reset --hard)似乎什么都没有改变。

我有一些本地更改并且无法通过我执行的任何命令来摆脱它们 git reset --hard origin/master 并且它也能够拉出主人的更改

答5:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

在阅读了一堆答案并尝试之后,我发现了各种边缘情况,这意味着有时它们不能完全清理工作副本。

这是我当前的 bash 脚本,它一直有效。

#!/bin/sh
git reset --hard
git clean -f -d
git checkout HEAD

从工作副本根目录运行。

最后一个命令给了我error: pathspec 'HEAD' did not match any file(s) known to git.

当我取出“-”时,它对我有用。 git checkout HEAD

git reset --hard 恢复跟踪的文件(暂存与否),git clean -f -d 删除未跟踪的文件,git checkout -- HEAD 那我们为什么需要这个?

我们不需要双连字符。一定是笔误。

删除了 git checkout -- HEAD 中的 --,因为这不是一个有效的命令,而 git checkout HEAD 是。

答6:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

查看 git-reflog。它将列出它记住的所有状态(默认为 30 天),您可以简单地检查您想要的状态。例如:

$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d

非常感谢威廉,对于 git reflog。我将树重置为旧版本,不知道如何恢复到最近。你的 git reflog 救了我。再次感谢。

也救了我!在我的情况下,我与 git rebase -i 的冒险出了问题(由于编辑错误最终清除了一些提交)。多亏了这个提示,我恢复了良好的状态!

30天默认是什么意思!?

@MoheTheDreamy 我的意思是有时间限制。最终,当它们的年龄超过该限制时,垃圾收集器将删除无法访问的引用。默认值曾经是(也许现在仍然是)30 天。所以较旧的参考文献可能不可用。

答7:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

只需执行 -

git stash

它将删除您的所有本地更改。您也可以稍后通过执行来使用它 -

git stash apply 

使用 git stash pop 会自动为您删除最顶层的隐藏更改

git stash drop 删除最新的隐藏状态而不应用于工作副本。

git stash apply 不会添加新创建的文件

答8:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

前面的危险:(请阅读评论。执行我的回答中提出的命令可能会删除比你想要的更多)

完全删除所有文件,包括我必须运行的目录

git clean -f -d

为了拯救我刚刚经历的痛苦:这也会删除 .gitignore-d 文件!

对不起,如果我给你带来任何麻烦。那时我只是试图恢复并删除该文件夹中的所有内容。我不记得确切的情况,但“-d”是唯一对我有用的东西。我希望我没有给你带来太多痛苦:-)

没有造成伤害。我有备份,但这可能需要免责声明;)

答9:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

我遇到了类似的问题。解决方案是使用 git log 查找本地提交的哪个版本与远程不同。 (例如版本是 3c74a11530697214cbcc4b7b98bf7a65952a34ec)。

然后使用 git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec 恢复更改。

答10:

huntsbot.com – 高效赚钱,自由工作

如果您在顶级项目目录中,请尝试此操作:

git restore .

如果没有,则使用:

git restore :/

如果您想还原子集的本地更改:

使用顶级路径规范魔术恢复所有工作树文件: git restore :/

恢复当前目录中的所有文件: git restore 。

文件类型(例如所有 C 源文件): git restore ‘*.c’

有关详细信息,请参阅 git restore documentation。

要删除未跟踪的文件:git clean -f

谢谢你。不过,那个“魔法”是可憎的。为什么不支持通配符?

SO post on pathspec 对于那些想知道的人。 @pdoherty926 pathspec 的语法中还包含通配符;不知道有多好。

答11:

huntsbot.com – 高效赚钱,自由工作

我搜索了一个类似的问题,

想要丢弃本地提交:

克隆存储库 (git clone) 切换到 dev 分支 (git checkout dev) 很少提交 (git commit -m “commit 1”) 但决定丢弃这些本地提交以返回远程 (origin/dev)

以下也是如此:

git reset --hard origin/dev

查看:

git status  

        On branch dev  
        Your branch is up-to-date with 'origin/dev'.  
        nothing to commit, working tree clean  

现在本地提交丢失,回到最初的克隆状态,上面的第 1 点。

谢谢,这是唯一对我有用的东西-“git reset --hard origin”

很高兴知道它有帮助。

这是唯一对我有用的东西。非常感谢

原文链接:https://www.huntsbot.com/qa/EV6J/how-do-i-revert-all-local-changes-in-git-managed-project-to-previous-state?lang=zh_CN&from=csdn

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!文章来源地址https://www.toymoban.com/news/detail-419001.html

到了这里,关于如何将 Git 托管项目中的所有本地更改恢复到以前的状态?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 本地项目如何连接git远程仓库

    第一步, 首先我们在git上 新建仓库 ,设置模板可 勾选Readme文件 。(readme文件的创建是为了介绍所写代码的一些详细信息,为了之后更好的维护。) 第二步,打开 本地项目 文件夹,鼠标右键选择 Git Bash Here  。 第三步,输入 git init 命令(在目录中创建新的 Git 仓库) 第四步

    2024年02月15日
    浏览(77)
  • 【Git】更改本地仓库的URL

    更新现有的远程仓库URL,使用以下Git命令 remote_name 是你要更改的远程仓库的名称 new_url 是新的远程仓库URL 可以使用以下命令查看当前存储库中已配置的所有远程仓库的名称  如果你要将名为 origin 的远程仓库的URL从 https://github.com/olduser/oldrepo.git 更改为 https://github.com/newuser/

    2024年02月13日
    浏览(28)
  • 常用Git指令|初入职Git指令学习|如何将Git项目拉至本地|如何将本地项目上传至Git|Ubuntu下Git环境配置|Ubuntu下如何利用VSCode使用Git指令

    实习入职已经一个月了,整理一下自己常用的一些指令,供自己查阅,也可以供一些新入职朋友参考。 这条博客也会不定时更新。 2022.10.26更新Ubuntu环境下的Git配置,因为最近可能需要win,Ubuntu,Mac三端代码同步,所以Git工具要用起来了! Git是一款代码同步的工具,方便团队协

    2024年02月09日
    浏览(54)
  • 如何将本地的项目上传到Git

    一、GitHub or GitLab or Gitee创建一个新的仓库 二、仓库路径创建成功后,将本地项目上传到git 1. 进入本地项目所在文件夹位置,右击 2.出现git命令框 输入git init 在当前项目的目录中生成本地的git管理(会发现在当前目录下多了一个.git文件夹) 3.输入git add . 将项目上所有的文件

    2024年02月04日
    浏览(37)
  • Git (版本控制,git安装和配置,git代码托管服务,git操作本地远程仓库,分支,idea整合git)【看这一片就够】

    目录 一、版本控制介绍 1. 版本控制介绍 2. 版本控制工具 3. git简介 二、git安装与配置 1. 下载git 2. 安装git 2. 配置git 三、git代码托管服务 1. 常见的git代码托管服务 2. 注册码云帐号【这里介绍一种的用法,其它也是一样的操作】 3. 创建远程仓库 四、git命令-操作本地仓库 1. 获

    2024年04月14日
    浏览(80)
  • 如何把git上的项目在本地运行起来

    第一步, 首先在git上找到你想要克隆下来的项目 按照如下操作复制项目地址链接  第二步,在电脑合适位置可以新建一个文件夹,用来存放你的项目。(比如我在E盘下的公司项目下新建了一个名为gift的文件夹)这步可有可无,只要你找到你想要存放的合适位置就行,一般克

    2024年01月22日
    浏览(58)
  • 在Git上更改本地分支名称/远程分支名称

    Git更改本地分支名称、远程分支名称 打开idea软件的Terminal控制台 在这种情况下,我们已经在\\\"test_1.0\\\"分支上,假设需要修改此分支的名称,不需要切换到任何其它分支 到此,成功更改了Git上的本地分支名称! “本地”分支名称已更改为“ test_2.0”,但这并不意味着你的分支名

    2024年02月16日
    浏览(49)
  • git 把项目托管到 码云出现的错误集合

    分享一下我git项目时碰见的错误  1、error: could not lock config file D:/orcad/Cadence/SPB_Data/.gitconfig: No suchfile or directory 在下载git后设置用户名、邮箱时会出现的错误 需要去修改环境变量,这个之前写好了,可以跳转看看 Git配置error:could not lock config file D:/orcad/Cadence/SPB_Data/.gitconfig:

    2024年02月11日
    浏览(33)
  • 如何将本地代码推送到git仓库/更换项目git仓库(简单粗暴)

    开发两年半了,这天有一个新项目需要我初始化项目,平常的工作自己只是拉取代码开发再推送,并没有自己创建过仓库,于是乎我研究了一个简单粗暴的方法,完美推送初始化项目! 1.首先在git网站先创建自己的远程仓库 2.直接复制远程仓库地址 3.使用编译工具直接拉取,

    2024年02月16日
    浏览(44)
  • git clone 一个 SpringBoot 项目,如何在本地运行?

    点击apply、ok 找到.xml文件,点击reload project 导入依赖项目就可以运行

    2024年02月17日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包