Git还原了大型提交的某些部分

时间:2014-04-28 12:45:21

标签: git github

我有一个rails应用程序,我在20个提交之前进行了一些迁移,然后最终不需要创建的表。我将更改推送到github,因此架构和迁移都在我的git历史记录中,但没有人克隆或使用我的分支。我想知道是否有一种方法可以将git恢复为该提交并刚刚删除了提交的迁移方面?

3 个答案:

答案 0 :(得分:3)

您首先必须“还原”您不想要的提交,然后再次推送到GitHub以从您的在线历史记录中删除。

让我们看看如何:

第1步

要恢复某些提交,您可以通过以下任何方式运行git rebase

a)如果您知道要恢复的提交的SHA1(请注意末尾的“^”):

git rebase -i SHA1^

,或者

b)如果你知道它是20次提交之前:

git rebase -i HEAD~21

这样做,Git将打开vim。

<强> STEP2

现在,您将看到提交的列表short SHA-1并提交消息。 删除所有不需要的内容(空白行和注释 - 以“#”开头 - 被忽略),每行dd,或d20d如果要从一行删除20行你是在。保存并退出(使用:wq)。 Git将删除您刚刚删除的所有提交。

重要:如果保存的文件为空或只有空行和/或注释,Git将中止操作。

第3步

使用这些更改更新您的GitHub存储库。要做到这一点,你必须强制推动:

git push --force origin/master

我假设您跟踪GitHub存储库作为源,并且您正在处理主分支。 否则请用您的配置替换它们。

<强> END 您从本地和GitHub中删除了这些不需要的提交。

答案 1 :(得分:0)

我会运行一个rebase

git rebase -i <commit>^

然后将pick更改为edit

答案 2 :(得分:0)

这是一个解决方案: 就像史蒂文所说的那样,交互式变基是一件好事。

$ git rebase -i [the_commit_preceding_your_problematic_commit]

启动此命令后,系统会提示您进入编辑器,其中包含一个菜单,您可以在该菜单中查看从有问题的提交开始的所有提交(在顶部)。 每个提交都以pick关键字开头。

要编辑提交,您必须通过修改 e 替换选择。 保存并离开编辑器,您将在使用edit标记的提交中处于分离的HEAD状态。 (好像你的时间一直走到那个提交的那一天) 现在你必须重置提交。

$ git reset HEAD^

即你落后一步。您将在交错区域中查看提交的所有文件,但尚未在索引中查看。

$ git status

现在您可以删除所需的文件,添加另一个文件并提交。 你的提交现在就像你想要的那样。

请记住,你还处于独立的HEAD状态。要告诉git一切正常,你必须输入:

$ git rebase --continue

然后git会带你回到你最后做出的最后一次承诺。 但是,你重写了git分支的所有历史记录。

为了推动您的修改,您必须指定push命令的--force选项。

注意:在重新定位时,如果出现问题,请执行以下操作:

$ git rebase --abort

相关问题