jon*_*nas 11 git github rebase
A-B-C Master
\D-E Feature
Run Code Online (Sandbox Code Playgroud)
执行rebase
命令后git checkout feature
- > git rebase master
我从feature
分支机构提交的所有提交都会消失,所以我A-B-C
提交了.在变基之后,feature
分支看起来像master
.此外,变基不会产生任何错误,但它不会显示"提交已重播"消息,我认为通常它会在变基期间显示.你知道可能导致这种行为的原因吗?
一旦我注意到我的提交消失了,我运行以下命令在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
就这一点而言,关于rebase如何运作的同一页面上也是如此.在你的例子中,git基本上是尝试逐个添加C和C之后的D和E. D&E的rebase承诺不会是原件,而是带有新哈希的克隆.原始文件仍然存在,但只是悬空而没有引用它们的分支(垃圾收集最终将删除它们).在rebase之后,你可以通过查看看到重新提交的"原始"版本git log ORIG_HEAD
但是,在此过程中可能会发生异常.Git将智能地跳过已经存在于"base"中的任何提交(在本例中为master) - 这可能发生分支被合并,还原,然后重新合并.
它也会跳过任何提交,如果它发现添加到基础的提交完全匹配,在它们的内容中 - 已经在历史记录中的提交 - 即使哈希值不同 - 如果合并了一个分支,则会发生这种情况,rebase,然后又合并了.
我怀疑是少数情况之一.
1)git branch --contains功能
这将列出其历史记录中包含您的功能分支的所有分支.如果master在该列表中,那么您的分支已经合并.在这儿无事可做.
有几个原因,这可能看起来不正确.
一个原因是您可能看不到当前主代码中的更改.这可能有几个原因.如果分支先前已经合并到master中,然后还原,那么提交已经存在,但是否定 - 即使重新合并这些恢复的提交也不会返回 - 您需要还原实际的恢复提交.
2)git checkout功能; git rebase --keep-empty功能
即使它们不包含任何"新"内容或更改, - keep-empty也会强制git保留您的提交.这不是修复或解决方法,但如果您在执行此操作后在历史记录中看到这些提交 - 那么这意味着您的提交不会丢失.他们故意被人跳过.如果你想保留空的,你可以自己决定.
如果是这种情况,那么我会查看过去是否已合并此分支.例如,它可能已合并为不同分支的一部分.也许鲍勃认为他需要你的feature
分支机构在他的bobs_feature
分支机构工作 - 他的分支机构让你在你的分支机构之前掌握,现在你的分支基本上是无关紧要的.另一种情况可能是它在过去合并为master,然后还原.这里的答案是恢复恢复提交本身 - 有点像在点击撤消后点击重做.
归档时间: |
|
查看次数: |
10862 次 |
最近记录: |