2013-01-12 128 views
15

我正在使用Xcode中的Objective C项目,并且需要恢复到在源代码控制中提交的以前版本。我怎么做?我可以找到如何提交和推送的信息,但没有关于如何恢复到旧版本的信息。如何在Xcode中恢复以前版本的代码

+0

什么源码控制系统有什么界面? – zaph

+1

我正在使用Xcode的内置git支持。我偶尔会推送到github,但我也有本地提交。如果这没有回答你的问题,那是因为我对这个工作原理不够了解。 –

+0

我使用第三方应用程序:Tower时,我发现Xcode Git支持不足。 [塔](http://www.git-tower.com) - 30天免费试用。 – zaph

回答

25

您无法在Xcode中一次性恢复整个项目,但可以从终端执行;只需cd到你的项目文件夹并输入git log来查找你要找的哈希,然后做git checkout [hash]。

+0

这样做后,我在哪里可以找到恢复的版本?对不起,我仍然在学习git中的git –

+1

@EthanFischer的方法,“checkout”会将您移动到版本历史中的不同位置或不同的分支。使用“结账”时,您仍然在本地工作并处于同一个目录中。您不会创建任何文件的新副本或从服务器中提取任何内容。这可能会让人困惑,特别是因为在Xcode(7.3)中,“源代码管理”菜单中使用术语“签出”来指代在Git中实际上确实拉下了服务器上存在的文件的“克隆”将它们放置在本地目录中。 –

+0

嗨,尝试了这一点,并得到以下消息:错误:您对本地更改以下文件将被结帐覆盖: \t下拉菜单3.5/DropDown菜单故事板/ DropDown菜单Storyboard-Prefix.pch 请提交您的在切换分支之前更改或隐藏它们。 Aborting – dancingbush

12

从苹果公司的文档报价在https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/Save_and_Revert_Changes_to_Files/ManageChanges.html

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

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

+0

我不再需要这个,但因为我相信它回答了我的问题,所以我正在检查它。谢谢。 –

+0

非常感谢您回复本条道路。我自己正在努力解决这个版本问题,并发现你的问题是最重要的话题。 -Xin – Hackless

+3

哇。苹果绝对应该让这更直观。如果Xcode可以在任何地方保存你的代码,那么你应该期望得到它,对吧?还是仅仅是我?伟大的工作苹果。我会提交一个功能请求。 – erdekhayser

2

如果你想获得一个单独的文件夹的任何提交的版本整个项目提取物,试试这个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 
3

这里是Xcode 8

enter image description here

+0

确实放弃所有更改杀死您的项目? – bearacuda13

+0

@ bearacuda13不,它将它恢复到之前的提交。如果这是你的第一次提交,那么是的,它会成为一个新项目 –

+0

这只是放弃自上次提交以来所做的所有更改并将其删除。你不能像这样跳回历史中的任意提交。 – Andy

2

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

  1. 单击左侧导航器部分的源代码管理图标,或者转到查看 - >导航器 - >显示源代码管理导航器。
  2. 显示所选分支的所有提交列表。
  3. 右键单击所需的提交,并选择“结帐‘的commitid’”

您也可以直接创建有一个分支,它可能在某些情况下

+0

上面的解决方案完美无缺 - 只需要先保存/放弃更改谢谢Andy –

0

我在Xcode的工作更加有用9.2项目有几个依赖关系和附加文件已被合并到它。在清理它的过程中,我无意中丢弃了该项目,并且无法弄清楚如何才能运行该项目,直到找到此解决方案。 我确实去了顶部菜单栏上的源代码控制,并首先丢弃了所有更改。然后我去了源代码控制管理器(左起第二个从项目导航器的右侧,并突出显示了我想要的提交,然后右键单击并选择了Checkout选项,该选项已经输入了我想要的提交的数量,并且它完美地工作。 第1步 - 放弃所有更改 第2步 - 选择您想要返回的提交。 第3步 - 右键点击并选择结账