重新定标后我是否丢失了更改?


78

我最近重新调整了我正在处理的分支。树的历史看起来像这样:

1 = 2 = 3 = 4
     \
      5 = 6 = 7
           \
            8

我想将更改(图表中的数字8)重新设置在master分支上(现在最多在图表中提交4)。所以我做了以下事情:

git checkout my_branch
git rebase master

<很多git mergetool / git rebase --skip解决冲突>

仅在我运行时:

git checkout my_branch
git diff master

我得到零差异。我没有丢失分支(我仍然可以从保存的补丁重新创建更改),但是找不到我执行的合并/重新设置。我做错什么了?我的更改是否与主服务器合并后,重新部署是否仍在某个地方?还是必须再次执行?


2
当您完成操作git rebase --skip(而不是--continue)时,是否有可能“跳过”了在重新定级期间实际上仍然有意义的更改?
CB Bailey 2012年

2
如果您已手动合并,通常会想要合并--continue。如果合并的结果是“无更改”,则只需要跳过。您跳过了哪些更改?您实际应用了多少?
CB Bailey 2012年

13
我有一条新规则:凌晨1点之后不得重新
定级

3
避免变基出错的一种简单方法是在启动分支之前创建分支。您也可以更轻松地将最终结果与原始结果进行比较。完成后只需删除分支即可。
jpmc26 2016年

2
(https://)goo.gl/YQUyi1节省了我的时间。
InaFK

Answers:


193

如果您没有发现任何差异,我怀疑您丢失了更改。您可能会使用git reflog来识别在重新设置基准之前已存在的分支,并用于git reset --hard <my-branch-tip-before-rebase>取回原始分支。是的,您将不得不再次执行该过程。:-(

我不太确定您最终如何看待他们。我本来希望在您提供的命令中看到以下内容:

1 = 2 = 3 = 4              (master)
     \       \
      \       5' = 6' = 8' (my_branch)
       \
        5 = 6 = 7

在这种情况下,您可能应该使用rebase --onto

git rebase --onto master <commit id for 6> my_branch

那会给你留下一个看起来像这样的图:

1 = 2 = 3 = 4              (master)
     \       \
      \       8'           (my_branch)
       \
        5 = 6 = 7

至于丢失更改,确实需要一些实践来处理合并冲突,尤其是当您有几个看起来几乎相同的大块时。我总是求助于提交所引入的实际差异,并尝试梳理出该更改并将其与分支中已有的内容以适当的方式合并。我可以轻松地看到您的更改可能在那里丢失了。

要记住的一件事。如果您不希望发生一堆合并冲突-因为您没有感觉到源头之间的分歧太大,那么看到那是做错事情的警告标志。最好进行备份,方法是:git rebase --abort调查分支机构,然后再次检查是否遇到冲突。确保记下发生冲突的位置(在变基将您踢到命令行之前,通常会有一个“正在应用...”)。通常这是一个很好的起点。

有时,冲突是不可避免的,并且要克服这些乏味的工作。但是我怀疑,通过实践,您将较少遇到这个问题。

有关在分支之间移植更改的更多信息,请参见git rebase手册页。搜索“ rebase --onto”。第一次点击应该使您进入有关将更改移植到另一个分支的部分。


21
git reset --hard xxxxx救了我!我以为一切都丢了!即使git reset xxxx没有--hard没有工作!
Chloe 2014年

15
reflog是赢家
Bronumski 2014年

30
这是一个救命稻草。
韦斯·赖斯

7
我看过类似的东西。我在上一份工作中看到了,今天又看到了。存储库可以使某人进入常规git rebase(相对于上游)丢失所有本地提交的状态,而只是将头设置为上游。而git rebase -i没有任何更改(选择所有内容)的a可以正常工作。老实说,我认为这是一种晦涩的错误。
Ryan Lundy 2015年

9
我的天啊!你救了我!我做了一个reflog,然后是一个樱桃摘:D
FernandoMartínez17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.