Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios git重置后如何恢复我的故事板--硬头^?_Ios_Swift_Xcode_Git - Fatal编程技术网

Ios git重置后如何恢复我的故事板--硬头^?

Ios git重置后如何恢复我的故事板--硬头^?,ios,swift,xcode,git,Ios,Swift,Xcode,Git,大约一周前,我将.gitignore文件推到我的存储库中,遇到了一些小问题,最终解决了这个问题,但注意到我所有的故事板也都在存储库中。天才的一笔,我研究了如何让他们离开那里,发现了上面的git重置命令,然后把它放进了我的终端,拍了拍自己的背,生活继续着。今天我刚意识到,在安装了一些CoCoapod之后,我花了数周时间制作的所有故事板都不见了,我把它们放在了一起。我花了最后一个小时阅读了类似的问题,但在阅读了一段时间后没有发现任何问题,我想知道是否有其他xcode用户遇到过同样的问题,可以提供帮助

大约一周前,我将.gitignore文件推到我的存储库中,遇到了一些小问题,最终解决了这个问题,但注意到我所有的故事板也都在存储库中。天才的一笔,我研究了如何让他们离开那里,发现了上面的git重置命令,然后把它放进了我的终端,拍了拍自己的背,生活继续着。今天我刚意识到,在安装了一些CoCoapod之后,我花了数周时间制作的所有故事板都不见了,我把它们放在了一起。我花了最后一个小时阅读了类似的问题,但在阅读了一段时间后没有发现任何问题,我想知道是否有其他xcode用户遇到过同样的问题,可以提供帮助

我还应该补充一点,我只是在舞台上添加了故事板,在重置时还没有提交它们,所以今天我使用git reflog命令,希望它们在失物招领处。我曾读到垃圾收集有一个月没有发生,所以我不认为(我希望)它们已经消失了

我今天下载了AWS SDK,这就是git reflog命令目前显示的全部内容。我需要进一步回滚git rest HEAD{}命令吗

多谢各位

您在评论中注意到您做了一个
git隐藏
这是一个关键的信息,它改变了一切。幸运的是,这也使恢复变得容易得多。特别是,这意味着您丢失的文件不是“悬挂的blob”,并且确实保存了它们的原始名称。(顺便说一句,注意,
git stash
表示
git stash save
;我将使用下面较长的形式将其与其他
git stash
命令区分开来。)

最简单的恢复方法是使用
git stash分支
。选择一个新的分支名称,一个您还没有的名称。为了便于说明,我将使用
saveme
,这是一个糟糕的名称,您应该选择一个更好的名称

git stash branch saveme
这将获取现有的
git stash
,使用运行
git stash save
时的当前提交创建一个新分支。然后,它会将索引(暂存区)恢复到运行
git stash save
时的状态,并将工作树恢复到运行
git stash save
时的状态。现在可以提交索引:

git commit -m 'save index as a commit'
然后提交工作树的其余部分(如果还有其他内容要提交):

git add --all
git commit -m 'save everything else as a commit too'
在这个答案的末尾(在另一次编辑中),我将添加一个关于整个序列发生了什么的图形图,从第一个
git add
s开始,经过
git stash save
git reset--hard HEAD^
直到最后一个
git stash分支


有一个警告:您的索引和工作树必须是干净的,才能使用
git stash分支
。如果您有未提交的工作,您可能应该现在提交,或者使用
git reset--hard
将其全部抛出。当然,任何一个都有后果:

  • 如果运行另一个
    git stash save
    ,则先前保存的存储将从
    stash@{0}
    向上推到
    stash@{1}
    。然后,您必须使用:

    git stash branch saveme stash@{1}
    
    将该存储转换为分支

  • 如果您选择使用git reset--hard,您将丢失所有未提交的工作,因此请确保这是正常的

图解 让我们看一看假设的终端会话,看看在工作时提交和分支会发生什么

$ cd my-git-project
此时,您处于Git工作树中。工作树是您的文件以正常形式存在的地方,计算机的其他部分(和您)可以使用它,而不是仅使用Git的形式,Git保存您或任何其他人提交的每个文件的每个版本。你在某个分支上,比如说
master
,只是为了具体。这个分支有一些提交集,以Git称之为该分支的tip提交结束。分支名称会记住此提示提交的哈希ID:

...--F--G--H   <-- master
暂存区域,也称为索引,现在不是“干净的”:它不再匹配提交
H
。相反,它具有已编辑和添加文件的副本

您的工作树可能与索引匹配,也可能与索引不匹配。如果它确实与您的索引匹配,并且如果您要运行
git commit
,git将对您的索引进行新的提交(这就是索引/暂存区域的主要用途:构建下一次提交),然后您的索引将与您的提交匹配,并且是干净的。如果您的工作树与您的索引匹配,那么也将是干净的。这看起来像:

...--F--G--H--I   <-- master
第一次(小写的
i
)提交是与
git提交
相同的提交。它只是不在分支
主机上
;这是这两个“藏匿袋”的一部分。第二个提交,
w
,很特别:在Git的其他部分看来,它就像一个合并提交,但实际上它只是一个工作树状态的提交,即使它与
i
中的索引状态相同

完成这两个隐藏包提交后,
git-stash
重置(清理)索引和工作树,一个la
git-reset——硬头。因此,现在您的索引和工作树再次匹配commit
H

接下来,您说您运行了
git reset--hard HEAD^
。这做了三件事:它将索引和工作树状态重置为所选提交的状态,即
H
之前的状态;它使名称
master
也指向所选提交。因此,现在您的存储库如下所示:

...--F--G   <-- master
         \
          H   [remembered in reflogs, *and* preserved via the stash]
          |\
          i-w   <-- stash
索引从
i
commit重新加载,工作树从
w
commit重新加载。如果现在运行
git commit
,您将得到:

...--F--G   <-- master
         \
          H--I   <-- saveme
现在,所有内容都以普通的提交方式永久保存(或者直到您删除
saveme
分支)
...--F--G   <-- master
         \
          H   [remembered in reflogs, *and* preserved via the stash]
          |\
          i-w   <-- stash
...--F--G   <-- master
         \
          H   <-- saveme
          |\
          i-w   [abandoned]
...--F--G   <-- master
         \
          H--I   <-- saveme
...--F--G   <-- master
         \
          H--I--J   <-- saveme
git fsck --lost-found