快进合并是不可能的。要合并此请求,首先在本地重新设置基准
Fast-forward merge is not possible. To merge this request, first rebase locally
最近,我创建了newbranch,并向Master分支创建了一个合并请求。在 TeamLead 接受合并请求到 Master 分支之前,另一个团队成员向同一个分支(新分支)提交了另一个修复。之后,我提交了本地更改并将 newbranch 中的更改拉到本地分支。我将本地提交推送到 newbranch
我的 TeamLead 告诉我将我的分支重新设置为早期版本。
并解决冲突。
我不知道现在该怎么办。有什么想法吗?
从您的新分支开始:
git checkout master
回到主分支
git pull origin master
获取最新版本的 master 分支
git checkout newBranch
回到你的新分支
git rebase origin/master -i
执行交互式变基。该命令将带您完成并让您选择提交、重命名它们、压缩它们等。假设您想要保留所有这些,当存在合并冲突时它会暂停,然后您必须在文本编辑器中解决它们,它会告诉您冲突发生的位置(在您的文本编辑器中)。您必须在修复这些文件后添加这些文件,然后执行 git rebase --continue
以继续进行变基。
当你完成变基后,你的 newBranch 将与 master 同步,并且在 master 中有你开始工作时不存在的任何提交,所有合并冲突都将得到解决,这样你就可以轻松地合并你的新分支。
您的 GitLab 似乎配置为不允许将具有合并提交的功能分支合并到 master
分支中。这是你走错弯的地方:
After that I committed my local changes and pulled the changes in newbranch to local branch.
你应该做的是提交你的工作,然后通过 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 拒绝了您的推送尝试。所以你应该安全地删除它。
我受了很多苦,今天我找到了一个非常简单的方法:
例如,假设您要传递内容:
来自名为 feature/NativeSubmodule 的分支
到名为 develop 的分支。
下载并安装 SourceTree [https://www.sourcetreeapp.com],然后在其中打开您的项目,然后按照此图中的步骤操作:
然后:
如果您只想将目标分支(开发)替换为原始分支内容(feature/NativeSubmodule),则不必执行“Extra)”步骤。 :D
在我的例子中,当我发送合并请求而没有从开发分支中提取和合并所有新代码时,就会发生这种情况。
我刚刚在控制台中写了这个
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>
留在当前分支:
git pull -r origin master
这将拉取当前分支并在 origin-master 分支上重新定位。这是一个 fast-forward 操作。如果第一次尝试不起作用,请打开 VSCode 并手动 accept/decline 更改。
git status
将显示仍在变基。
git rebase --continue
将添加新提交。
git push --force
将完成变基,管道将开始构建。
最近,我创建了newbranch,并向Master分支创建了一个合并请求。在 TeamLead 接受合并请求到 Master 分支之前,另一个团队成员向同一个分支(新分支)提交了另一个修复。之后,我提交了本地更改并将 newbranch 中的更改拉到本地分支。我将本地提交推送到 newbranch
我的 TeamLead 告诉我将我的分支重新设置为早期版本。 并解决冲突。 我不知道现在该怎么办。有什么想法吗?
从您的新分支开始:
git checkout master
回到主分支
git pull origin master
获取最新版本的 master 分支
git checkout newBranch
回到你的新分支
git rebase origin/master -i
执行交互式变基。该命令将带您完成并让您选择提交、重命名它们、压缩它们等。假设您想要保留所有这些,当存在合并冲突时它会暂停,然后您必须在文本编辑器中解决它们,它会告诉您冲突发生的位置(在您的文本编辑器中)。您必须在修复这些文件后添加这些文件,然后执行 git rebase --continue
以继续进行变基。
当你完成变基后,你的 newBranch 将与 master 同步,并且在 master 中有你开始工作时不存在的任何提交,所有合并冲突都将得到解决,这样你就可以轻松地合并你的新分支。
您的 GitLab 似乎配置为不允许将具有合并提交的功能分支合并到 master
分支中。这是你走错弯的地方:
After that I committed my local changes and pulled the changes in newbranch to local branch.
你应该做的是提交你的工作,然后通过 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 拒绝了您的推送尝试。所以你应该安全地删除它。
我受了很多苦,今天我找到了一个非常简单的方法:
例如,假设您要传递内容:
来自名为 feature/NativeSubmodule 的分支 到名为 develop 的分支。
下载并安装 SourceTree [https://www.sourcetreeapp.com],然后在其中打开您的项目,然后按照此图中的步骤操作:
然后:
如果您只想将目标分支(开发)替换为原始分支内容(feature/NativeSubmodule),则不必执行“Extra)”步骤。 :D
在我的例子中,当我发送合并请求而没有从开发分支中提取和合并所有新代码时,就会发生这种情况。
我刚刚在控制台中写了这个
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>
留在当前分支:
git pull -r origin master
这将拉取当前分支并在 origin-master 分支上重新定位。这是一个 fast-forward 操作。如果第一次尝试不起作用,请打开 VSCode 并手动 accept/decline 更改。
git status
将显示仍在变基。
git rebase --continue
将添加新提交。
git push --force
将完成变基,管道将开始构建。