tus*_*ath 50 git atlassian-sourcetree
我正在使用源树.我创建了一个包含多个更改的存储,并错误地删除了它.有没有办法找回它们?
ish*_*hak 71
基于以上答案,这是一个简单的序列:
打开终端窗口并cd到存储库下的文件夹中.然后:
git fsck | awk '{print $3}' > tmp.txt
cat tmp.txt | xargs git show > tmp2.txt
Run Code Online (Sandbox Code Playgroud)
现在在编辑器中打开tmp2.txt,找到丢失的代码,并在其上找到commit-id.然后应用代码:
git stash apply <commit id>
rm tmp.txt tmp2.txt
Run Code Online (Sandbox Code Playgroud)
这救了我的命!我真的感谢所有回答这个问题的人.我祝福git创建者Linus Torvalds将已删除的东西保存在git数据库中.天才!!
Jan*_*ger 47
存储内部保存为从存储列表引用的合并提交.
git fsck可以找到悬空物体.它不仅可以找到你已删除的藏品,还可能找到其他东西......所以你会想要查找看起来像是你的藏品的提交(git show <ID>显示有关对象的相关信息并决定它是否是一个您正在寻找).
完成后,您需要做的就是将其重新插入到藏匿列表中.该列表存储在,.git/logs/refs/stash并且行具有以下格式:
<ID of previous stash commit in list or 0000000000000000000000000000000000000000 if none> <ID of merge commit> Your Name <your@email.example> <UNIX timestamp> <time zone, e.g. +0000><TAB char><description of stash>
Run Code Online (Sandbox Code Playgroud)
这是一个有效的例子:
16b9a2d400dafe7ea25592029e3e5582d025c7d8 5def7605dfe625e8b3a3152fe52a87cc36694b6a Jan Krüger <email.censored@invalid> 1374227992 +0200 WIP on master: 0dbd812 Update draft release notes to 1.8.4
Run Code Online (Sandbox Code Playgroud)
只是合成为要重新插入(名称/邮件/时间戳/描述不藏匿线有是准确的),你应该能够再次正常使用.
快乐狩猎!
qqx*_*qqx 21
与之前的答案状态一样,您可以使用git fsck列出未包含已删除存储的任何内容引用的对象.但是,可以使用git show过滤该对象列表来仅显示如下的状态:
git fsck 2> /dev/null |
awk '/commit/{print $3}' |
git show --stdin --merges --grep '^WIP on'
Run Code Online (Sandbox Code Playgroud)
如果您知道何时创建了存储,您还可以添加一个类似于--since '2 days ago'最后一行的参数
来进一步限制输出.希望这会将列表缩小到可管理的大小.
一旦找到了正确的存储,请记下其提交ID,并且可以使用
git stash apply COMMITID它来应用它,就像它没有被删除一样.
Ten*_*lah 12
这是恢复已删除存储的最干净的解决方法。
git fsck --lost-found
ls -1 .git/lost-found/commit/ | xargs -n 1 git log -n 1 --pretty=oneline
git stash apply [tag]
将 [tag] 替换为 id,例如:
git stash 应用 40e47250d0b4fb6143be67c115b708be126e79d3
小智 11
在隐藏时使用评论可能会有所帮助,使用:
git stash save "comment"
Run Code Online (Sandbox Code Playgroud)
它使用以下方法为我省去了查找已删除存储的麻烦:
git fsck --lost-found
ls -1 .git/lost-found/commit/ | xargs -n 1 git log -n 1 --pretty=oneline
git stash apply [tag]
Run Code Online (Sandbox Code Playgroud)
小智 9
正如JanKrüger所说的那样,git fsck是要走的路.但是,如果您发现自己无法(无论出于何种原因)在存储文件中成功合成一行并使存储显示在可用列表中,则可以git stash apply <guid>直接使用,而无需添加该行.这将立即将(不提交)文件更改应用于当前分支.
另一个解决方案是:
git fsck 2>&1 | awk '/dangling commit/{print $3 "^!"}' | xargs git log
Run Code Online (Sandbox Code Playgroud)
查找作者并提交信息(日期,哈希,作者等)
git stash store <hash-id-of-specific-commit>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19872 次 |
| 最近记录: |