12

不确定这是否是使用分支的正确方法。

  • 我在结构 A 上有这个应用程序。
  • 我在结构 A 上创建了一个分支 Z(但我让自己在主分支上工作)。
  • 在工作时(在主分支上),我改变了那个结构,我最终把一切都搞砸了。:)
  • 我从未向代表提交或添加这些新文件。

要求:

  • 我需要恢复到上次提交时存在的结构。还原所有未提交的更改,并删除可能已添加的新文件和文件夹。

如何才能做到这一点?

4

3 回答 3

15

如果您创建了一个混乱的单独分支,您需要做的就是切换回您之前所在的分支git checkout A:(假设A是您所在分支的名称......或者它可能是master)。

如果需要,您可以稍后删除错误的分支,如果有未合并的提交,也可以添加git branch -d <branchname>一个。-f

编辑:如果您的存储库包含许多要删除的错误更改,您可以使用git reset --hard HEAD撤消它们。如果有新文件(不被 git 跟踪),git clean -fd将全部删除。显然,请谨慎使用,因为 git 无法恢复它们。

于 2011-04-27T14:40:11.290 回答
5

我需要反转到分支 Z 上的结构 A“快照”

$ git checkout A
$ git branch -d Z
$ git branch Z
$ git reset --hard HEAD~3
$ git checkout Z

用英语:

删除您的“Z”分支并从“A”的当前状态重新创建它。

将您的 A 分支重置为三个提交。这是一个例子——在你的历史中,三个可能不是重置到的正确深度。将该数字更改为正确的数字(并用于git log计算出分支分支的提交次数)。

切换到您的 Z 分支并确认您以前在“A”中的更改现在在“Z”中。

于 2011-04-27T17:55:30.230 回答
3

我怀疑你只创建了分支:

git branch Z

当您实际上想要创建它并切换到它时。您可以通过使用 -b 标志来创建一个分支并切换到它以进行 git checkout,如下所示:

git checkout -b Z

您现在需要做的是撤消已提交到主分支的更改。这将撤消提交并使索引看起来就像提交之前一样:

git checkout master
git reset --soft HEAD^

然后切换到 Z 并提交索引中的更改(已经暂存):

git checkout Z
git commit -m "blah blah"

希望这可以帮助。

哦,是的,避免直接在 master 上工作,除非它是一个简单的错误修复。


请保留您的答案,因为它包含我必须理解的重要概念。那没有用。我需要的是:抓住分支 Z 并将其作为主人 - 这可能吗?

当然是的。你可以通过很多不同的方式做到这一点。如果只有一个提交,您可以将 Z 分支合并到 master 以将该提交提交到 master。但我假设你根本不想要 Z 分支上的提交。然后你可以做同样的事情但切换分支,例如:

git checkout Z
git reset --soft HEAD^
git checkout master
git commit -m "blah blah"
于 2011-04-27T15:31:04.927 回答