昨日、git で非常に奇妙な状況が発生しました。
いつものように機能ブランチを作成しました。その後、誰かがその機能ブランチで数日間作業します。
その間に、master ブランチで重要なことが起こりました。これらの変更は、機能ブランチでも必要でした。
そのため、マスター ブランチをフィーチャー ブランチにマージしました (フィーチャーで共同作業する必要があるため、フィーチャー ブランチは通常すぐにリモートにプッシュされるため、リベースはありません)。このマージはローカルでのみ行われ、まだリモートにはプッシュされていません。
機能ブランチの作業は続きます
master からのマージ + 継続的な作業により、ローカル機能ブランチ new_feature は origin/new_feature より 40 コミット先になりました
ここで、これら 40 個のコミットをリモートの機能ブランチにプッシュしたいと考えました。最初に、プッシュする前にいつものように git pull --rebase を実行します。
今、私たちはたくさんの紛争を経験しています。40 件のコミットを修正する価値はないと判断し、git rebase --abort を実行します。次に、git pull --no-rebase を試します。「すでに最新です」 - 奇妙な
git status では、ローカル ブランチとリモート ブランチが分岐していることがわからないため、git push を試します。
予想外に、git push が機能しました。最後にプルしてから変更されたリモート ブランチにプッシュしようとすると、拒否されます。したがって、明らかにリモートは変更されていませんが、 git pull --rebase は奇妙なことをしました。
では、これについて奇妙なのは、
git pull --rebase はすぐに「すでに最新」を返さず、
git pull --rebase は、実際には終了すべきではない大量の競合を報告しました (報告された競合は、機能ブランチで作業されたものとは何の関係もありませんでした)
何がそのような状況を引き起こす可能性がありますか?