[解決済み] Git でリモートブランチをリベースする
質問
Git の中間リポジトリを使ってリモートの SVN リポジトリをミラーリングしており、そこから人々がクローンして作業することができます。この中間リポジトリは、毎晩上流の SVN から master ブランチをリベースしており、私たちは機能ブランチで作業しています。たとえば
remote:
master
local:
master
feature
機能ブランチをリモートにプッシュして、期待通りのものを完成させることができました。
remote:
master
feature
local:
master
feature
その後、リモートを追跡するためにブランチを再セットアップしました。
remote:
master
feature
local:
master
feature -> origin/feature
そして、すべてがうまくいっています。ここからやりたいことは、feature ブランチをリモートの master ブランチにリベースすることですが、これを自分のローカルマシンから行いたいと思います。できるようにしたいですね。
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
リモート機能ブランチをリモートマスターと最新の状態に保つため。しかし、この方法はGitから文句を言われる。
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
git pull
はトリックを実行しますが、避けたいマージコミットが発生します。私は、メッセージに記載されている
feature -> feature
ではなく
feature -> origin/feature
が、これは単にプレゼンテーションの問題かもしれません。
私は何かを見逃しているか、あるいは完全に間違った方法でこれを進めているのでしょうか?リモートサーバーでリベースを行わないことは重要ではありませんが、リベースによるマージの衝突を修正することが非常に難しくなります。
解決方法は?
その機能を一人で使っているのか、他の人がそれを使って作業しているのかによります。
自分だけならリベースの後に強制的にプッシュすることができます。
git push origin feature -f
しかし、もし他の人がそれに取り組んでいるのであれば、master から rebase するのではなく、merge するべきです。
git merge master
git push origin feature
これにより、コラボレーションする相手と共通の履歴を持つことができるようになります。
別の次元では、バックマージはしない方がいいです。これは、その機能に属さない他のコミットでその機能ブランチの履歴を汚していることになり、リベースの有無にかかわらずそのブランチでの以降の作業を難しくしてしまいます。
という私の記事です。 フィーチャーごとのブランチ .
お役に立てれば幸いです。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] git rebase の取り消し
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルの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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】fatal: 有効なオブジェクト名ではない: 'master'
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み] [Solved] 作業ツリーのディレクトリ 'example.com' を作成できませんでした。パーミッションが拒否されました
-
git commit リモートエラー [rejected] master -> master (フェッチファースト)
-
[解決済み】Git Push Error: リポジトリデータベースにオブジェクトを追加する権限が不足しています。
-
[解決済み] GIT_DISCOVERY_ACROSS_FILESYSTEM が設定されていない。
-
[解決済み] Git pull - マージする前に移動または削除してください。
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?