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

问题描述 投票:3回答:2

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

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

所以我给,

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

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

有了它,它分支到一个新的分支名称(没有分支,rebasing分支-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 --continue之前找回我所做的所有冲突解决方案?
  2. 我怎么能不陷入需要一次又一次合并以将更改从master转移到我的分支的同一循环?
  3. 成功将所有更改从master合并到我的分支后,将我的分支合并回master,我可以简单地使用, git co master git merge branch-A

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

请帮忙...

git git-branch git-merge git-rebase
2个回答
2
投票

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

  • 首先,备份文件夹到哪个项目,如果出现问题,你还有原始的本地存储库。
  • 在master中使用rebase进行拉动: git checkout master git pull --rebase origin master
  • 用master重新启动你的分支: git checkout branch-A git rebase master
  • 当然,如果存在冲突,请解决您已经采取的方式。

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

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

关于merge和rebase的更多信息请参阅this answer的问题'git merge'和'git rebase'之间的区别是什么?


0
投票

虽然rebase总是有可能成为一个新的分支(在第一次推送到远程之前),然后再次进行重新定位(当主分支进展时)并且第二次推送似乎并不完全支持git。

确切地说,在后一种情况下,git抱怨你需要在你可以推动之前拉(到你自己的远程分支,其他人没有进行任何改变!),但是一旦你拉你突然得到合并冲突(与谁 - 与我自己?),在这里地狱开始......我知道很少有球队因为这些问题而从merge切换回rebase

因此,一旦您的分支被推送到远程,只提交并推送以下更改(可能是为了响应审阅者注释)是合理的,但永远不会再次变更。如果主分支到目前为止维护者要求第二个rebase,那么可以完成的只是rebase,然后重命名分支。然后它可以作为新推,也打开一个新的拉请求。

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

git已经过优化,可以快速查看和合并拉取请求。繁殖和孵化几周和几个月的可能性仍然有限,对主分支仍然很好。

© www.soinside.com 2019 - 2024. All rights reserved.