【问题标题】:What git command will undo most recent commit without deleting files or creating more branches?什么 git 命令会在不删除文件或创建更多分支的情况下撤消最近的提交?
【发布时间】:2019-07-28 04:57:10
【问题描述】:

在上一次 git 提交期间,我不小心在一个核心文件夹中提交了数百个文件。

我不想丢失这些文件,但我不希望它们出现在我的仓库中。 如何在保留文件的同时撤消最后一次 git 提交?

这是一个本地构建,在 git 推送之前,所以我不关心历史丢失,我更愿意以最简单的方式来做这件事,即如果我可以避免创建新分支或从头部分离,等等,那将是首选。

【问题讨论】:

标签: git


【解决方案1】:

你需要做的第一件事在这个 stackoverflow 问题中描述:How do I undo the most recent local commits in Git?

这将撤消将保存它们但未在您的计算机上提交的最后一次提交

$ git reset HEAD~

然后要从 git 中删除你不想要的文件,你应该使用 git rm 命令(我假设你想要 -r(递归)选项来删除整个目录

$ git rm -r <dir path>

之后,您应该在 git 中拥有上次提交的所有更改,但它不应该跟踪您意外添加的更改!

我还建议将此核心文件夹添加到您的 .gitignore 文件中

【讨论】:

  • 感谢您的回复。我通读了您的答案和您共享的链接,我想澄清一些事情:“git reset HEAD~”是否仅重置(即删除)最后一次提交或所有提交?如果它只重置(即删除)最后一次提交,那么“git reset HEAD-1”和“git reset HEAD~”有什么区别?此外,通过链接线程中 Mark Amery 的回答,他的 5 个步骤将所有内容保留在现有/仅/主分支上,这意味着我可以“git push origin master”到我的 github 存储库,或者我需要做其他任何事情在第 5 步提交后返回主分支?
  • "git reset HEAD~" 应该只是重置最后一次提交,据我所知,"HEAD-1" 无效,但你可以使用"HEAD~1",那就是相同。 (查看更多信息:stackoverflow.com/questions/26785118/…)至于 5 个步骤,他们应该让您将代码提交到本地 master 分支,这样您就可以像您一样“git push origin master”说没有问题:)
  • 我似乎遇到了麻烦。我遵循了这些步骤,但似乎我只是未提交它们,但它们仍在我的添加列表中?例如,我随后将此行添加到我的 .gitignore 文件中:core/(我想忽略核心目录,以及它的所有文件和子目录)。但是当我点击“git status”时,我仍然会看到所有核心文件的全部内容
  • 这里的问题是,由于您添加了它们,git 仍在跟踪这些文件,因此我将使用 git rm 命令将它们从跟踪的文件中删除。它的工作方式与 git add 相同,但只是将它们从跟踪的文件中删除。
  • 我已经运行了该命令,我这样做了:“git rm --cached -r core”(我知道这会从 git add 中删除我的核心目录和子目录,而不是删除或恢复文件的实际内容?)但是现在在运行“git status”时文件仍然显示,除了现在它们位于“要提交的更改:(使用“git reset HEAD ...”标题下)取消暂存)"
【解决方案2】:

下面的命令:-

git reset --soft HEAD^^

【讨论】:

  • 感谢 ER Softwiil Fam,这样一个命令会将我带回到上一个提交之前的上一个提交 1,并且我的文件不会受到影响?然后下次我 git add / git commit 它只会提交我添加的新内容而忘记这些意外提交?
  • 正确。使用 git reset --soft HEAD^ for linux 和 git reset --soft HEAD^^ fow windows
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 2023-01-03
  • 2016-01-11
  • 2021-05-17
  • 2018-07-09
  • 2018-09-15
  • 1970-01-01
  • 2011-04-30
相关资源
最近更新 更多