Git rebase一次又一次地回到同一个地方

时间:2015-04-03 02:35:56

标签: git git-branch git-merge git-rebase

我遇到Git rebase的问题,我必须一次又一次地合并代码,但仍然不成功。

我从主人那里剪了我的分支(A)。我开始在我的分支上工作并做了更多提交。与此同时,master也被更改并进行了一系列提交。现在我正在尝试将我的分支合并回主人。

所以我给,

git co master
git pull 
git co branch-A
git rebase master

现在我收到像CONFLICT这样的消息:合并冲突

通过这个,它分支到一个新的分支名称(没有分支,重新分支-A) 在此之后我解决所有冲突,然后我给git添加所有这些文件。

现在我得到状态

rebase in progress; onto ad0da3f
You are currently rebasing branch 'branch-A' on 'ad0da3f'.
  (all conflicts fixed: run "git rebase --continue")

在此之后我运行git rebase --continue并且我为解决冲突所做的所有更改都消失了,它又回到了合并的初始状态,并像以前一样抛出了大量的冲突!

我的问题是,

  1. 如何在发出git rebase之前恢复我所做的所有冲突解决 - 继续?
  2. 我怎么能不陷入需要一次又一次合并以将更改从master转移到我的分支的同一循环?
  3. 成功将所有更改从master合并到我的分支后,将我的分支合并回master,我可以简单地使用,

    git co master git merge branch-A

  4. 或者我是否需要发出更多命令?

    任何帮助请...

2 个答案:

答案 0 :(得分:2)

对我来说,很难说你出了什么问题,但请按照以下步骤操作:

  • 首先,备份项目所在的文件夹,如果是的话 出了问题,你还有原来的本地存储库。

  • 在master中使用rebase进行拉动:

    git checkout master
    
    git pull --rebase origin master
    
  • 使用master重新启动分支:

    git checkout branch-A
    
    git rebase master
    
  • 当然,如果存在冲突,请解决您已经采取的行动。

当我说自己改变一个分支时,我想说用远程更新你的分支。当然,如果只使用分支A,则不需要在本地分支中执行 pull pull --rebase 。但是在掌握中使用rebase到avoid merge commits that result from git pull是一个很好的做法。当然,rebase会产生一些影响,例如,在进行rebase之前推送提交。因此,理想的做法是将所有内容都设置为本地,并且只有在重新启动后才推送您的分支或将其与主服务器合并。请参阅The Perils of Rebasing

在我的情况下,我喜欢做的事情是:在使用master重新定义我的功能分支后,我结帐并掌握并执行git merge <my-branch> --no-ff。这样我的git历史记录就有了一个提交合并分支&#39; my-branch&#39; 。而且我这样喜欢我的git历史。

有关合并与rebase的更多信息,请参阅this answer以了解问题&#39; git merge&#39;之间的区别和&#39; git rebase&#39;?

答案 1 :(得分:0)

虽然总是可以rebase创建一个新分支(在第一次推送到远程之前),稍后再次调低基础(随着主分支的前进),而第二次推送似乎并没有得到完全的支持git。

确切地说,在后一种情况下,git抱怨您需要先拉才能将其推入(您的远程分支,其他人都未提交任何更改!),但是一旦拉进,您就会突然遇到合并冲突(谁-和我自己?),地狱就此开始……我知道很少有团队因为这些问题而从merge切换回rebase

因此,一旦将分支推送到远程,则仅提交和推送后续更改(可能是对审阅者的响应)是合理的,但永远不要再次变基。如果master分支进展得如此之快,以至于维护者要求进行第二次变基,那么所有可以做的就是变基,然后重命名该分支。然后可以将其作为新的推送,也打开一个新的提取请求。

或者,您可以使用--force推送以擦除远程副本,并将其替换为当前本地内容。但是,--force有点皱眉,所以我不能说“推荐的解决方案”。

git经过优化,可快速查看和合并拉取请求。在主分支上繁殖并孵化数周和数月仍处于良好状态的可能性是有限的。