最近、新しいブランチを作成し、マスターブランチへのマージリクエストを作成しました。 TeamLeadがMasterブランチへのマージ要求を受け入れる前に、別のチームメンバーが同じブランチ(newbranch)に別の修正をコミットしました。その後、ローカルの変更をコミットし、newbranchの変更をローカルブランチにプルしました。そして、ローカルコミットをnewbranchにプッシュしました
TeamLeadから、ブランチを以前のバージョンにリベースするように指示されました。そして、競合を解決します。今何をすべきかわかりません。何か案が?
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がプッシュの試みを拒否したため、マージコミットはまだ誰も見ていません。したがって、安全に削除する必要があります。
NewBranchから開始:
git checkout master
マスターブランチに戻る
git pull Origin master
masterブランチの最新バージョンを取得する
git checkout newBranch
新しいブランチに戻る
git rebase Origin/master -i
反復リベースを実行します。コマンドを実行すると、コミットの選択、名前の変更、スカッシュなどが可能になります。それらをすべて保持する場合、マージの競合が発生すると一時停止し、テキストエディターで解決する必要があります。 、競合が発生した場所(テキストエディタ内)を示します。これらのファイルを修正後に追加し、git rebase --continue
リベースを続行します。
リベースが完了すると、newBranchはマスターと同期され、作業を開始したときに存在しなかったコミットがmasterにあり、newBranchを簡単にマージできるようにすべてのマージ競合が解決されます。