web-dev-qa-db-ja.com

早送りマージはできません。このリクエストをマージするには、まずローカルでリベースします

最近、新しいブランチを作成し、マスターブランチへのマージリクエストを作成しました。 TeamLeadがMasterブランチへのマージ要求を受け入れる前に、別のチームメンバーが同じブランチ(newbranch)に別の修正をコミットしました。その後、ローカルの変更をコミットし、newbranchの変更をローカルブランチにプルしました。そして、ローカルコミットをnewbranchにプッシュしました

gitlab error

TeamLeadから、ブランチを以前のバージョンにリベースするように指示されました。そして、競合を解決します。今何をすべきかわかりません。何か案が?

8
SanjX

GitLabは、マージコミットのある機能ブランチをmasterブランチにマージできないように構成されているようです。これはあなたが間違ったターンをした場所です:

その後、ローカルの変更をコミットし、newbranchの変更をローカルブランチにプルしました。

すべきことは、作業をコミットしてから、リモートnewbranchブランチからリベース経由でプルすることです。状況を改善するには、GitLabからプルしたときに発生したマージコミットを無効にすることをお勧めします。マージコミットが発生した可能性が高いのは、git pullデフォルトでは、リベース戦略ではなくマージ戦略が使用されます。チェックgit log、およびプルが正しくないために発生したコミットの数を確認します。マージコミットが1つしかないと仮定すると、次のようになります。

git reset --hard HEAD~1

git log正しいようです。これで、ブランチの最上部に最新のコミットのみが表示されるはずです。あなたがこれを見ていると仮定すると、あなたはリベース経由でプルするのが良いです:

git pull --rebase Origin newbranch

これにより、同僚のコミットが取り込まれ、ブランチ上で最新のコミットが再生されます。最後に、ブランチを押し出すことができます。問題を解決する必要があります。

git Push Origin newbranch

上記で提案したようにハードリセットを行うことは、一般的には良いことではありません。しかし、あなたの場合、GitLabがプッシュの試みを拒否したため、マージコミットはまだ誰も見ていません。したがって、安全に削除する必要があります。

2
Tim Biegeleisen

NewBranchから開始:

git checkout masterマスターブランチに戻る

git pull Origin master masterブランチの最新バージョンを取得する

git checkout newBranch新しいブランチに戻る

git rebase Origin/master -i反復リベースを実行します。コマンドを実行すると、コミットの選択、名前の変更、スカッシュなどが可能になります。それらをすべて保持する場合、マージの競合が発生すると一時停止し、テキストエディターで解決する必要があります。 、競合が発生した場所(テキストエディタ内)を示します。これらのファイルを修正後に追加し、git rebase --continueリベースを続行します。

リベースが完了すると、newBranchはマスターと同期され、作業を開始したときに存在しなかったコミットがmasterにあり、newBranchを簡単にマージできるようにすべてのマージ競合が解決されます。

3
chevybow