git – 重新加入后是否丢失了我的更改?

我最近刚刚修改了一个我正在工作的分支机构。树的历史看起来像这样:

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

我想将我的更改(图中的第8个)改为在主分支上(现在在图上提交4)。所以我做了以下:

git checkout my_branch
git rebase master

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

只有现在我跑:

git checkout my_branch
git diff master

我得到零差异。我没有丢失我的分支(我仍然可以从我保存的补丁重新创建我的更改),但是我找不到我做的合并/ rebase。我做错了什么?我的修改与主人合并还在哪里,还有我必须再次做的吗?

如果您没有看到任何差异,我怀疑您失去了更改。您可以使用git reflog来确定rebase之前存在的分支,并使用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 – 支持来调查分支机构并重新检查,这是很好的。确保记下发生冲突的地方(通常是在应用程序踢你到命令行之前的“应用…”)。这通常是一个很好的开始。

有时候,冲突是不可避免的,而且是艰苦的工作。但是我怀疑练习,你会遇到这个问题。

有关移植分支之间更改的更多信息,请参阅git rebase手册页。搜索“rebase –onto”。第一个打击应该让你在一个部分谈论移植更改到另一个分支。

翻译自:https://stackoverflow.com/questions/13154562/have-i-lost-my-changes-after-rebasing

转载注明原文:git – 重新加入后是否丢失了我的更改?