[解決済み】Featureブランチのリベースの後、Gitプッシュが拒否される。
質問
OK、これは単純なgitのシナリオだと思ったのですが、何か見落としているのでしょうか?
私の場合は
master
ブランチと
feature
ブランチを作成します。私はいくつかの作業を
master
で、一部は
feature
で、さらに
master
. 最終的にはこんな感じになります(辞書順はコミット順を意味します)。
A--B--C------F--G (master)
\
D--E (feature)
に問題はありません。
git push origin master
を残して、リモートの
master
は更新されず、また
git push origin feature
(オン
feature
) のリモートバックアップを維持するために、私の
feature
の仕事をします。今までは、問題なかった。
しかし、今度は
feature
の上に
F--G
はmasterにコミットしているので
git checkout feature
と
git rebase master
. まだいい。今、私たちは
A--B--C------F--G (master)
\
D'--E' (feature)
問題あり。
をバックアップしたいのですが、リベースされた新しい
feature
で分岐した
git push origin feature
,
プッシュが拒否される
リベースによりツリーが変更されたため。これを解決するには
git push --force origin feature
.
を使うのは嫌だ。
--force
必要性を確認せずに では、必要なのでしょうか?リベースは
必ず
は、次の
push
であるべきです。
--force
ということですか?
この機能ブランチは他の開発者と共有されていないので、問題はありません。 デファクト 問題はもっと概念的なことです。
どのように解決するのですか?
問題は
git push
つまり、ローカルブランチとリモートブランチの違いは、ローカルブランチの末尾に新しいコミットがあるかどうかだけである、と仮定しています。
Z--X--R <- origin/some-branch (can be fast-forwarded to Y commit)
\
T--Y <- some-branch
を実行すると
git rebase
コミットDとEが新しいベースに適用され、新しいコミットが作成されます。つまり、リベース後はこのような状態になります。
A--B--C------F--G--D'--E' <- feature-branch
\
D--E <- origin/feature-branch
そのような状況では、リモートブランチをローカルに早送りすることはできません。しかし、理論的にはローカルブランチをリモートにマージすることができます (もちろん、そのようなことは必要ありません)。
git push
は早送りのみのマージを実行するため、エラーが発生します。
そして、何
--force
オプションが行うのは、リモートブランチの状態を無視してそこにプッシュしているコミットを設定することだけです。つまり
git push --force origin feature-branch
を単純にオーバーライドします。
origin/feature-branch
をローカルな
feature-branch
.
私見では、機能ブランチのリベースは
master
で、それをリモートリポジトリに強制的に戻すのは、そのブランチで作業しているのが自分だけである限りOKです。
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み] リモートにないトラッキングブランチを削除
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] Gitによるhotfixブランチのfeatureブランチへのマージ
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] masterブランチと'origin/master'が分岐している、'undiverge'ブランチの方法は?
-
[解決済み】git push >> fatal: 設定されたプッシュ先がありません。
-
[解決済み] [Solved] originにプッシュしようとすると、Gitが「No such remote 'origin'」と言うのはなぜですか?
-
[解決済み】マージが終了していません(MERGE_HEADは存在します)。
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み] git update-index --assume-unchanged <file> を元に戻す。
-
[解決済み] ある特定のコミットのコミット作者を変更する方法は?
-
[解決済み] master からの Git ブランチの更新
-
[解決済み] Git で、変更したファイルを古い(最終ではない)コミットに追加する方法
-
[解決済み] リベースの後、ブランチにプッシュできない