如何在Xcode中恢复以前版本的代码

如何在Xcode中恢复以前版本的代码,xcode,commit,restore,Xcode,Commit,Restore,我正在Xcode中处理一个Objective C项目,需要恢复到源代码管理中提交的以前版本。我该怎么做?我可以找到关于如何提交和推送的信息,但没有关于如何恢复到旧版本的信息。您不能在Xcode中一次恢复整个项目,但可以从终端执行;只需将cd放入项目文件夹,键入git log即可找到您要查找的哈希值,然后执行git checkout[hash]。引用苹果公司的文档,网址为 “比较文件版本以还原代码行 选择“视图>版本编辑器>显示比较视图”以比较存储库中保存的文件的版本。使用跳转栏根据文件在存储库中

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

您不能在Xcode中一次恢复整个项目,但可以从终端执行;只需将cd放入项目文件夹,键入git log即可找到您要查找的哈希值,然后执行git checkout[hash]。

引用苹果公司的文档,网址为

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


最后一行显示键:复制和粘贴。

如果要在单独的文件夹中获取任何已提交版本的整个项目摘录,请尝试以下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 

这里是
Xcode 8


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

  • 单击左侧导航器部分中的源代码管理图标,或转到查看->导航器->显示源代码管理导航器
  • 将显示所选分支的所有提交的列表
  • 右键单击所需的提交并选择“签出”提交

  • 您还可以从那里直接创建一个分支,在某些情况下,它可能更有用

    我正在处理Xcode 9.2项目,该项目有多个依赖项和已合并到其中的附加文件。在清理过程中,我无意中破坏了这个项目,在找到这个解决方案之前,我不知道如何让它运行。 我确实去了顶部菜单栏上的源代码管理,并首先放弃了所有更改。然后我去了源代码管理器(项目导航器从左到右的第二个),突出显示了我想要的提交,然后右键单击并选择了签出选项,该选项已经输入了我想要的提交数量,并且工作得非常好。 步骤1-放弃所有更改 步骤2-选择要返回的提交。
    步骤3-右键单击并选择“签出”

    我迟到了,但我遇到了这个问题,幸运的是,我以前的版本在“隐藏更改”下

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


    什么源代码管理系统什么接口?我使用的是Xcode内置的git支持。我偶尔会推到github,但我也有本地提交。如果这不能回答你的问题,那是因为我对这是如何工作的了解不够。我使用第三方应用程序:Tower,因为我发现Xcode git支持不足。-30天免费试用。哦,很好悲伤!我正在绞尽脑汁想弄清楚为什么iPhone模拟器中的代码不起作用。我启动此线程的目的是恢复到一个已知的点,以尝试回溯。这也没有解决问题。结果问题出在模拟器上。在退出模拟器并运行我的proj之后ect再次出现,我的问题消失了。经验教训:如果某个东西在模拟器中不起作用,请使用核武器,然后再试一次。如果你想看这篇文章,也希望它能有所帮助……我不再需要这篇文章,但因为我相信它回答了我的问题,我正在检查它。谢谢。谢谢你回复这条冷冰冰的线索。我我自己也在努力解决这个版本控制问题,发现你的问题是最热门的话题。-XinWow。苹果肯定应该让这个问题更直观。如果Xcode可以把你的代码保存在某个地方,你有点希望把它拿回来,对吧?还是那只是我?苹果做得很好。我将提交一个功能请求。我不认为这是一个解决方案,因为你不可能以合理的方式对所有文件都这样做。故事板和其他没有代码的文件怎么办?我认为更明智的做法是:不,你不能这样做,终端是唯一可以访问所有git命令的地方,但你可以返回到单个文件并复制和粘贴更改。@Hackless链接不再有效…but感谢您提供信息:)执行此操作后,我在哪里可以找到还原的版本?对不起,我还在学习学习如何git@EthanFischer在Git中,“签出”会将您移动到版本历史记录中的不同位置或不同分支。使用“签出”时,您仍然在本地和同一目录中工作。您没有制作任何文件的新副本或从服务器提取任何内容。这可能会让人困惑,尤其是在Xcode(7.3)中,“源代码管理”菜单中使用了“签出”一词,指的是Git中的“克隆”,它实际上会将服务器上存在的文件拉下来并放在本地目录中,消息:错误:您对以下文件的本地更改将被签出覆盖:下拉菜单3.5/下拉菜单脚本B