2012-07-18 42 views
1

藏匿我有大量的不可达的提交(愚蠢的我试图clear控制台,而我已经git stash键入)如何添加一个无法git的承诺由其哈希

我已经得到的一个散列这些哈希从一个混乱与git fsck

有一些简单的方法xargs这些哈希回到git存储?

+0

你的标题说“不可读”,但你的描述说“无法访问”,这是什么? – 2012-07-18 01:55:02

+1

无法访问。我的错。仍然没有直接打字>> – arcyqwerty 2012-07-18 01:57:26

回答

3

快速回答:

git fsck | grep commit | cut -d' ' -f3 | 
    while read hash; do git rev-parse --verify --quiet $hash^2 && echo $hash; done | 
    xargs git log --grep WIP --pretty=oneline | 
    while read hash wip on branch commit junk; do 
    git checkout $hash; git reset --soft $commit; git stash; done 

注意,这将藏匿的索引和工作树的部分分成不同的藏匿处。你能举一个你保存的输出的例子吗?存储器有多个部分,您可能没有所有部件的SHA。

已编辑为包含示例存储发现脚本以从右侧相对基准重新生成存储。

+0

我已经把它列出到了'HASH WIP on master:'message'使用'git fsck | grep commit |切-d''-f3 |同时读取散列;做git rev-parse --verify --quiet $ hash^2 && echo $ hash;完成| xargs git log --grep WIP --pretty = oneline' – arcyqwerty 2012-07-18 02:09:06

+0

然后通过哈希来管理'awk'{print $ 1}' - 我知道我假设所有存储的提交都有'WIP'在提交信息 – arcyqwerty 2012-07-18 02:10:40

+0

@arcyqwerty:然后我的答案将重新连接所有位并将它们放入存储中,当然,正如我所说的,如果您有多行输出并且具有相同的注释(这意味着索引和工作目录都被不同地存储),那么他们将形成两个窗口。让我知道这是否发生在你身上或你是否在意。我可以尝试调查一下更复杂的重新连接 – 2012-07-18 02:18:40