【发布时间】:2015-01-06 05:45:28
【问题描述】:
A-B-C Master
\D-E Feature
在执行rebase 命令后git checkout feature -> git rebase master 我从feature 分支的所有提交都消失了,所以我有A-B-C 提交。 feature 分支在变基后看起来像 master。此外,rebase 不会给出任何错误,但它不会显示“commits are replayed”消息,我认为它通常会在 rebase 期间显示。你知道是什么导致了这种行为吗?
一旦我注意到我的提交消失了,我就运行以下命令来查找 git 历史记录中丢失的代码:git rev-list --all | xargs git grep expression 这个命令返回了一个提交哈希,但是当我运行 git log 时这个哈希不存在(因为 rebase) .如果我这样做git reset --hard missing-hash,我可以再次看到原始(正确)feature 代码。运行 rebase master 再次重现同样的问题。
编辑:我刚刚注意到我有一些额外的提交,比如 WIP on commit-message 和 index on commit-message 当我做 git reset --hard missing-hash 时它可以与 git stash / git stash apply 相关吗
【问题讨论】:
-
我知道如何取回我的文件。 “合并大师”也可以使用。我想找出可能导致这种变基命令行为的原因
-
这些提交 D 和 E 在其内容上是否与 master 的提交相同? (在这种情况下,它们将在变基期间被跳过)
-
它们与 master 不同,否则我不会注意到 rebase 后代码中缺少任何内容。附言在变基之前我做了几次'git commit --amend'。
-
我同意 VonC 的观点,即在你的 rebase 期间你不会看到倒带和重放的唯一方法是,如果 master 和 feature 之间的共同祖先提交是 C(E),并且 B-C 是相同的提交D-E。