【问题标题】:How to restore previous version of code in Xcode如何在 Xcode 中恢复以前版本的代码
【发布时间】:2012-12-27 05:37:05
【问题描述】:

我正在 Xcode 中处理一个 Objective C 项目,需要恢复到在源代码管理中提交的先前版本。我怎么做?我可以找到有关如何提交和推送的信息,但找不到有关如何恢复到旧版本的信息。

【问题讨论】:

  • 什么源码控制系统什么界面?
  • 我正在使用 Xcode 的内置 git 支持。我偶尔会推送到 github,但我也有本地提交。如果这没有回答您的问题,那是因为我对它的工作原理了解不够。
  • 我使用 3rd 方应用程序:Tower 用于那些我发现缺乏 Xcode Git 支持的时候。 Tower - 30 天免费试用。
  • 哦,天哪!我一直在努力弄清楚为什么代码在 iPhone 模拟器中不起作用。我启动这个线程的目的是恢复到一个已知点,该点试图回溯。那也没有解决问题。原来问题出在模拟器上。退出模拟器并再次运行我的项目后,我的问题消失了。经验教训:如果模拟器中的某些内容无法正常工作,请对其进行核对,然后重试。
  • 如果你愿意,也可以看看这篇文章"Revert to the desired commit (Xcode)"希望对你有帮助...

标签: xcode commit restore


【解决方案1】:

您不能在 Xcode 中一次还原整个项目,但您可以从终端执行此操作;只需 cd 进入您的项目文件夹并输入 git log 以找到您要查找的哈希,然后执行 git checkout [hash]。

【讨论】:

  • 执行此操作后,我在哪里可以找到恢复的版本?不好意思,我还在学习git的方法
  • @EthanFischer 在 Git 中,“签出”会将您移动到版本历史记录中的不同位置或不同的分支。使用“结帐”时,您仍在本地和同一目录中工作。您不会制作任何文件的新副本或从服务器中提取任何内容。这可能会令人困惑,特别是因为在 Xcode (7.3) 中,“源代码管理”菜单中使用了“签出”一词来指代 Git 中的“克隆”,实际上它确实会下拉服务器上存在的文件,并且将它们放在本地目录中。
  • 嗨,尝试了这个并得到以下消息:错误:您对以下文件的本地更改将被结帐覆盖:下拉菜单 3.5/下拉菜单故事板/下拉菜单故事板前缀.pch请在切换分支之前提交您的更改或存储它们。中止
  • 我将接受的答案更改为这个答案,因为 1) 先前接受的答案中的链接不再有效,2) 使用 git 几年了,我知道它是如何工作的。我之前一直在寻找的东西与 git 的工作方式不一致。我想说正确的答案应该是 mu。恢复不是您想要在 git 环境中执行的操作。从较旧的提交中分支是您想要的。
【解决方案2】:

引用苹果文档https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/Save_and_Revert_Changes_to_Files/ManageChanges.html

"比较文件版本以还原代码行 选择查看 > 版本编辑器 > 显示比较视图以比较存储库中保存的文件的版本。使用跳转栏根据它们在存储库中的位置选择文件版本。每个跳转栏控制其上方内容窗格的选择。要显示版本,请浏览层次结构以找到它,然后单击以选择它。阴影区域表示版本之间的变化。” “您可以使用版本时间线根据时间顺序选择文件版本。单击中心栏中的时间线查看器图标(../art/TimeLineIcon_2x.png)以显示两个编辑窗格之间的时间线。将指针向上移动或向下浏览时间线以浏览可用版本。找到所需版本后,单击左侧或右侧指示器三角形以在相应的编辑器窗格中显示该版本。 您可以在版本编辑器中编辑文件的当前工作副本。如果您想恢复版本之间的更改,您可以从旧版本中复制代码并将其粘贴到当前版本中。”

最后一行揭示了关键:复制粘贴。

【讨论】:

  • 我不再需要这个,但因为我相信它回答了我的问题,所以我正在检查它。谢谢。
  • 感谢您回复这条冷酷的线索。我自己也在努力解决这个版本问题,发现你的问题是最热门的。 -辛
  • 哇。苹果绝对应该让这更直观。如果 Xcode 可以将您的代码保存在某个地方,您会希望将其取回,对吗?还是只有我一个人?伟大的工作苹果。我要提交功能请求。
  • 我不认为这是一个解决方案,因为您无法以合理的方式对所有文件执行此操作。没有代码的情节提要和其他文件呢?我认为更明智的说法是:不,你不能这样做,终端是唯一可以访问所有 git 命令的地方,但你可以返回到单个文件并复制和粘贴更改。
  • @Hackless 该链接已失效...但感谢您获取信息 :)
【解决方案3】:

如果您想在单独的文件夹中获取任何已提交版本的整个项目提取,请尝试以下 shell 脚本:

#!/bin/sh
#
#  restores an old version of xcodeproject from git repository
#  into folder  $HOME/gitcopy
#  current directory must be the rootdir of the project
#  Xcode should not access the same project at this time
#
set -x
PROJECT_ROOT=.
COPY_DEST=$HOME/gitcopy
if [ -e *.xcodeproj ]
then
    git log
    echo "Which version ?"
    read x
    git checkout $x
    git checkout -b copyVersion
    cp -R $PROJECT_ROOT $COPY_DEST
    git stash
    git checkout master;
else
    echo "No xcode project root folder";
fi 

【讨论】:

    【解决方案4】:

    这是Xcode 8中的可视化方法

    【讨论】:

    • 放弃所有更改会杀死您的项目吗?
    • @bearacuda13 不,它会将其恢复到上一个​​提交。如果那是您的第一次提交,那么是的,它将成为一个新项目
    • 这只是丢弃自上次提交以来所做的所有更改并永久删除它们。你不能像这样跳回历史中的任意提交。
    【解决方案5】:

    在 Xcode 9 中,您可以签出任何以前的版本。

    1. 单击左侧导航器部分的源代码管理图标,或转到查看->导航器->显示源代码管理导航器。
    2. 将显示所选分支的所有提交列表。
    3. 右键单击所需的提交并选择'Checkout "commitID"'

    你也可以直接从那里创建一个分支,在某些情况下可能会更有用

    【讨论】:

    • 上述解决方案完美运行 - 只需要先保存/放弃更改谢谢安迪
    • 这给我们留下了一个分离的 HEAD。您只能通过“git checkout master”、“git merge commitID”在控制台上修复。
    【解决方案6】:

    我正在开发 Xcode 9.2 项目,该项目包含多个依赖项和附加文件。在清理它的过程中,我无意中破坏了这个项目,直到我找到这个解决方案,我才弄清楚该怎么做才能让它运行。 我确实去了顶部菜单栏上的源代码管理并首先放弃了所有更改。然后我去了源代码控制管理器(项目导航器右侧的左起第二个,突出显示我想要的提交,然后右键单击并选择 Checkout 选项,它已经输入了我想要的提交的编号,它工作得很好. 第 1 步 - 放弃所有更改 第 2 步 - 选择要返回的提交。 第 3 步 - 右键单击​​并选择结帐

    【讨论】:

      【解决方案7】:

      我迟到了,但我遇到了这个问题,幸运的是,我以前的版本处于“隐藏更改”状态。

      在文件否定的左侧,选择第二个选项,您应该会看到一个名为 stashed changes 的文件夹,在它下面将显示所有可用的先前版本。只需右键单击它并单击“应用隐藏的更改”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多