A-B-C Master
\D-E Feature在执行了rebase命令git checkout feature -> git rebase master之后,来自feature分支的所有提交都消失了,因此有A-B-C提交。重基后,feature分支看起来像master。此外,重基不会产生任何错误,但它不会显示“提交是重放”消息,我认为它通常在重基过程中显示。你知道是什么导致了这种行为吗?
一旦我注意到我的提交消失了,我就运行以下命令来查找git历史记录中缺少的代码:git rev-list --all | xargs git grep expression,这个命令返回一个提交哈希,但是当我运行git日志时(因为重基),这个散列不存在。如果我做了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相关吗?
发布于 2015-01-05 21:16:30
同样,在关于重基工作方式的问题上也是如此。在你的例子中,git基本上是一个接一个地添加D和E。重基提交的D&E将不会是原件,相反,他们将是克隆与新哈希。原始的将仍然存在,但是将只是在没有分支引用它们的情况下悬空(垃圾收集最终会删除它们)。在重基之后,通过查看git log ORIG_HEAD,您可以看到重基提交的“原始”版本。
但是,在这一过程中可能会出现例外情况。Git将智能地跳过“基”中已经存在的任何提交(在本例中是主)--这可能发生一个分支被合并、恢复、然后重新合并。
它还将跳过任何提交,如果它发现将提交添加到基的内容中与其内容相同--提交已经在历史上存在--即使散列不同--如果一个分支被合并、重基,然后再合并,则可能会发生这种情况。
我怀疑几种情况中的一种。
1) git分支--包含功能
这将列出在其历史记录中包含您的特性分支的所有分支。如果主人在这个列表中,那么您的分支已经合并了。这里没什么可做的。
不过,有几个原因似乎并不正确。
原因之一是您可能看不到当前主代码中的更改。这可能有几个原因。如果分支以前已经合并到主服务器中,然后被恢复,那么提交就已经存在了,但是被否定了--即使重新合并了这些已恢复的提交也不会返回--您将需要恢复实际的还原提交。
2) git签出功能;git重基--保持空功能。
保持为空将强制git保持您的提交,即使它们不包含任何“新的”内容或更改。这不是一个修复或解决办法,但如果在您的历史记录中看到这些提交,那么它就意味着您的提交不会丢失。他们是故意被跳下去的。如果你想保留那些空的,你可以自己决定。
如果是这样的话,我想看看这个分支过去是否合并了。例如,它可能已被合并为另一个分支的一部分。也许Bob认为他需要feature分支在他的bobs_feature分支中做你的工作--他的分支在您的分支之前就已经掌握了它,而现在您的分支基本上是无关紧要的。另一种情况可能是,它在过去合并成主人,然后恢复。这里的答案是恢复还原,提交自己--类似于按下撤消后的重做。
https://stackoverflow.com/questions/27117952
复制相似问题