Xcode 的 git,没保存不小心 checkout 后还能救吗?

2021-04-07 23:44:02 +08:00
 icebarley

各位大佬好,我是一个 git 小白,平时写 APP 没太注重 git 这块知识,今天想给 APP 写个新功能,想添加一个分支。

然后进入了 Xcode 的 git 界面,发现 master 这个分支的版本是三个月前,最近 commit 的都跑到总项目文件这里了(图片的蓝色文件夹处),然后想着 checkout 应该就是合并一下,可以把最近的 commit 合并到 master 里,之后就悲剧了,整个项目回到了三个月前的样子。

我写 APP 比较佛系,晚上偶尔写写新功能,平时没有 add 、commit 的习惯,几乎都是版本快发布前才做这些操作。现在就是 dropbox 保存了 3 天前的文件,最坏的结果就是重新写这 3 天的代码。不过我看了一下项目下面 .git 这个文件夹,里面貌似还有 objects 、index 这些文件,不知道能不能根据这些恢复我 checkout 前的代码呢?

有看到说 PyCharm 、jetbrains 这些软件能恢复历史记录,那如果我把 .git 导入这两个软件是不是也能恢复呢?求大佬赐教!

5839 次点击
所在节点    git
49 条回复
sunnywqf
2021-04-08 08:43:52 +08:00
Xcode 的 undo 能找回来不?
hash
2021-04-08 08:53:01 +08:00
命令行才是正解,从根本上避免瞎点按钮造成的问题
RedBeanIce
2021-04-08 09:01:20 +08:00
@nieyujiang,。。appcode 是智能提示等智能使用吗,,,,本地存储历史 show history 或许可以救题主,appcode 智能提示或许不行
rationa1cuzz
2021-04-08 09:19:45 +08:00
没有 git add 没有备份 无解
sutra
2021-04-08 09:40:06 +08:00
如果有 TimeMachine,还能找回来。

另外不要把 git repo 放在 iCloud 文件同步的地方,会有奇奇怪怪的问题。
z1113456051
2021-04-08 09:41:46 +08:00
用文本编辑可以找回
hlx
2021-04-08 09:48:57 +08:00
不要让代码在你的电脑上过夜, 没事就 commit, push, 一个功能完成后整理下 commit 历史记录就行了
ZHanYao
2021-04-08 09:56:38 +08:00
在 Xcode 上切换分支只有两种选项“Cancel”和“Stash and Checkout”,也就是说必须 stash 才能 checkout 成功。你在 Xcode 的 git 列表下的“Stashed Changes”文件夹下应该能看到
WillBC
2021-04-08 10:08:39 +08:00
歪个楼,Emacs 的 Undo fu session 插件可以在重启 Emacs/Mac 后照旧 undo redo,独立于 git 的。
https://gitlab.com/ideasman42/emacs-undo-fu-session
WillBC
2021-04-08 10:13:01 +08:00
nieyujiang
2021-04-08 10:13:28 +08:00
@RedBeanIce #23 这玩意每次打开,就是一顿疯狂的索引,代码提示也不咋地🌚
amoyiki
2021-04-08 10:14:17 +08:00
git reflog 看看 checkout 之前的操作有没有 commit 记录
icebarley
2021-04-08 10:26:07 +08:00
@xiadong1994 可能是我没表达清楚,昨晚没 checkout 之前,点击蓝色那个文件夹名,就能看到最近 3 个月提交的 commit ;而点击 master 分支,只能看到 3 个月之前的 commit 内容,也就是说 3 个月前不知道我的什么神奇操作,变成这样子,也就是说我的工作区不在 master,所以 checkout 到 master 之后就导致了最近 3 个月的 commit 不见了。

@ZHanYao 今晚回家我再去仔细看看,但是昨晚出问题之后我也看过这里,好像都变成了 master 分支下的内容,记录的操作都是 3 个月前的了。。。

总之谢谢各位解答,好在这个亏不算太大,这次事件也让我恶补了 git 的知识,挺划算的哈哈哈😂
icebarley
2021-04-08 10:29:53 +08:00
@WillBC @zsen @z1113456051 @amoyiki 今晚试试,感谢
zhuweiyou
2021-04-08 10:30:37 +08:00
不太了解 xcode . 如果是 jb 系列的 IDE, 有自带的 local history 可以看到每次的改动和时间.
ZHanYao
2021-04-08 11:05:18 +08:00
@icebarley #33 假设你 A 分支最后一次提交是在 3 个月前,当你在 A 分支上有更改并且没提交的情况下想要切换到 B 分支,这时就如我在#28 楼说的“必须 stash 才能 checkout 成功”,Xcode 会将你在 A 分支上所有更改记录保存在“Stashed Changes”文件夹下。如果你想要将此更改恢复到 A 分支上,你只需要切回 A 分支并在 Stashed Changes 文件夹下找到对应的更改记录,右击选择“Apply Stashed Changes...”即可恢复。
MintZX
2021-04-08 11:19:56 +08:00
如果你没有 stash 或者 commit 就不小心删除了文件,请善用 IDE 的 revert 功能。至少 Jetbrain 的 IDE 是有这个功能的。直接一键 revert 所有代码更改。
h123123h
2021-04-08 11:21:49 +08:00
找找 local history 吧
LINAICAI
2021-04-08 11:46:51 +08:00
没 commit 不会有记录,除非做了 git stash push
Vitta
2021-04-08 13:28:20 +08:00
我有次 Commit 了忘了 Push 了,回家重装了系统

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/768881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX