[解決済み] git rebaseの基本
質問
を使い始めました。
git rebase
最近、この方法が正しいかどうか100%確信が持てません。質問のために、オリジンには2つのブランチがあります。
master
と
next
から枝分かれした
master
.
2つの間の最後の同期以来。
master
は2回コミットされ
next
6:
$ git log --oneline origin/next..origin/master
59b5552 master commit #2
485a811 master commit #1
$ git log --oneline origin/master..origin/next
4ebf401 next commit #6
e9b6586 next commit #5
197ada0 next commit #4
4a2c3c6 next commit #3
040a055 next commit #2
84537bf next commit #1
チェックアウトするとき
next
を実行し
git rebase -i origin/master
, 以下のようになります。
$ git status
# On branch next
# Your branch and 'origin/next' have diverged,
# and have 8 and 6 different commits each, respectively.
そして最後に
git pull --rebase
の2つのコミットは
master
は
next
:
$ git log --oneline origin/next..next
8741d09 master commit #2
485a811 master commit #1
質問です。
- このやり方は正しいのでしょうか?
-
なぜ
8 and 6
まで異なるコミットpull --rebase
が実行されるのですか? - フローを簡略化できないか?
ありがとうございました。)
解決方法は?
では、最初から説明しましょう。これはあなたの元の状態の図です。
A-B-C (マスター、オリジン/マスター) \ D-E-F-G-H-I (ネクスト、オリジン/ネクスト)
チェックアウトしたとき
next
をリベースし
next
の上に
origin/master
にある 2 つのコミットの後に、新たに 6 つのコミットが作成されました。
origin/master
. これらの新しいコミットには、 "マスターコミット #2" (
C
を先祖とするものであり、元の先祖である
origin/master
と
origin/next
が分岐している(
A
のように、ハッシュが異なります。そのため、以下のようなことがわかると思います。
next
とは8つの異なるコミットがあります。
origin/next
の2つです。
origin/master
にあった 6 つのコミット、そして
origin/next
.
その後
git checkout next ; git rebase -i origin/master
であれば、このようになります。
A-B-C (マスター、オリジン/マスター) \ \ \ D'-E'-F'-G'-H'-I' (次) \ D-E-F-G-H-I (オリジン/ネクスト)
を見ることができます。
next
にないコミットが 8 件あります。
origin/next
そして
origin/next
にない 6 つのコミットがあります。
next
. もちろん、これはコミットの SHA-1 ハッシュ値によるものです。実際の内容は
git diff origin/next next
-- の変更点のみを表示します。
B
と
C
(図中のラベルの通り)。
をすると
git pull --rebase
を実行したまま
next
からの変更点を取得します(リモートの
origin/next
) を作成し、現在のブランチをリベースします (
next
) をそのリモートの上に置く。これによって
next
しかし
ではなく
で
origin/next
の後に表示されるように
origin/next
新しい
next
ブランチを作成します。このように表示されるはずです。
A-B-C (マスター、オリジン/マスター) \ D-E-F-G-H-I (原点/次点) \ B'-C'(ネクスト)
履歴のグラフがこのようなものであれば、成功です。
しかし、本当は真ん中の図のような形にしたかったのではないでしょうか、特に
next
はフィーチャーブランチで、プロジェクトの次のピースを作っているところです。
master
は安定したコードと小さなバグフィックス用です。もしそうなら、あなたは
git push
ではなく
git pull --rebase
を使うと、リモートにあなたのバージョンの履歴を反映させることができます。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] git rebase の取り消し
-
[解決済み] Git フェッチ リモートブランチ
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] 2つのリビジョン間でどのファイルが変更されたかを表示する
-
[解決済み】"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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】マージの競合が発生した git stash pop の取り消し
-
[解決済み】Gitのエラー。リモートリポジトリへの接続時に「Host Key Verification Failed」。
-
[解決済み】ローカルに変更があるにもかかわらず、git pushが「すべて最新」と言う
-
[解決済み] [Solved] 作業ツリーのディレクトリ 'example.com' を作成できませんでした。パーミッションが拒否されました
-
git commits with an error: 更新が拒否されました。現在のブランチの先端が、このブランチより後ろにあるためです。
-
[gitコミット失敗の解決] 現在のブランチの先端が後ろにあるため、更新が拒否されました。
-
git push reports an error ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み] GIT_DISCOVERY_ACROSS_FILESYSTEM が設定されていない。
-
[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?