无法快进合并。要合并此请求,请首先在本地重新设置基准

问题描述 投票:0回答:5

最近,我创建了新分支并向 Master 分支创建了合并请求。在 TeamLead 接受合并请求到主分支之前,另一个团队成员已向同一分支(新分支)提交了另一个修复。之后,我提交了本地更改并将 newbranch 中的更改拉到本地分支。我将本地承诺推到了 newbranch

gitlab error

我的团队领导告诉我将我的分支重新设置为早期版本。 并化解矛盾。 我现在不知道该怎么办。有什么想法吗?

git github gitlab branch rebase
5个回答
68
投票

从你的新分支开始:

git checkout master
回到主分支

git pull origin master
获取最新版本的 master 分支

git checkout newBranch
返回您的新分支

git rebase origin/master -i
执行交互式变基。该命令将引导您完成并让您选择提交、重命名它们、压缩它们等。假设您想要保留所有这些,那么当存在合并冲突时它将暂停,然后您必须在文本编辑器中解决它们,它会告诉您冲突发生的位置(在文本编辑器中)。您必须在修复这些文件后添加这些文件,然后执行
git rebase --continue
继续重新设置基准。

完成变基后,您的新分支将与 master 同步,并且 master 中会有您开始工作时不存在的任何提交,并且所有合并冲突都将得到解决,以便您可以轻松合并您的 newBranch。


21
投票

您的 GitLab 似乎被配置为不允许具有合并提交的功能分支合并到

master
分支中。 这就是你走错路的地方:

之后,我提交了本地更改并将 newbranch 中的更改拉到本地分支。

您应该做的是提交您的工作,然后通过 rebase 从远程

newbranch
分支拉取。 为了解决这种情况,我建议取消从 GitLab 拉取时发生的合并提交。 合并提交很可能发生,因为
git pull
默认使用合并策略,而不是变基策略。 检查
git log
,看看有多少提交是由于不正确的拉取而引入的。 假设只有一次合并提交,那么应该执行以下操作(注意:工作目录中所有未提交的修改将被不可逆地删除,因此在继续之前保存/提交):

git reset --hard HEAD~1

再次验证

git log
看起来是否正确。 您现在应该只能在分支顶部看到最新的提交。 假设您确实看到了这一点,那么您就可以通过 rebase 拉取:

git pull --rebase origin newbranch

这将引入您同事的提交,然后在分支顶部重播您的最新提交。 最后,你可以将分支推出来,问题应该就解决了:

git push origin newbranch

请注意,按照我上面的建议进行硬重置通常不是一件好事。 但就你而言,还没有人看到合并提交,因为 GitLab 拒绝了你的推送尝试。 所以你应该可以安全地删除它。


6
投票

我受了很多苦,今天我找到了一个极其简单的方法:

例如假设你要传递内容:

来自名为 feature/NativeSubmodule 的分支 到一个名为 develop 的分支。

下载并安装 SourceTree [ https://www.sourcetreeapp.com ],然后在其中打开您的项目,然后按照此图中的步骤操作:

tutorial

然后:

tutorial2

如果您只想将目标分支(开发)替换为原始分支内容(feature/NativeSubmodule),则不必执行“Extra)”步骤。 :D


6
投票

就我而言,当我发送合并请求而不从开发分支拉取和合并所有新代码时,就会发生这种情况。

我刚刚在控制台中写了这个

git add .
git commit -m "my commit"
git push 

无需更改分支即可开发并从中提取(合并后)所有内容。

对于工作,您需要从开发中提取实际代码并将其合并到您的分支

git add .
git commit -m "my commit"
git checkout develop
git pull
git checkout <branch_name>
git merge develop
// if have any  conflicts fix them and push it
git push  // or if need set upstream git push --set-upstream origin <branch_name>

3
投票

留在当前分支:

git pull -r origin master

这会拉取当前分支并在 origin-master 分支上重新建立基础。这是快进操作。如果第一次尝试不起作用,请打开 VSCode 并手动接受/拒绝更改。

git status
将显示仍在变基。

git rebase --continue
将添加新的提交。

git push --force
将完成变基并且管道将开始构建。

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