在重新投标之后,我是否已经失去了更改

我最近重新devise了一个我正在开发的分支。 树的历史看起来像这样:

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 

我得到零差异。 我还没有失去我的分支(我仍然可以从我保存的补丁重新创build我的更改),但是我找不到我所做的合并/重新分配。 我做错了什么? 我的变更是否与主人合并,还是必须重新执行?

如果你没有看到任何区别,我怀疑你失去了你的改变。 你可能会使用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 --abort ,调查分支机构,再检查一下是否有冲突。 确保记下发生冲突的地方(在rebase将你踢到命令行之前,通常会有“Applying …”)。 这通常是一个很好的开始。

有时候,冲突是不可避免的,而且很难完成。 但是我怀疑在实践中,你会遇到这个问题。

有关在分支之间移植更改的更多信息,请查看git rebase手册页。 search“rebase – 去”。 第一次打击应该让你在一个部分谈论移植到另一个分支的变化。