質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

mergeコミットのリベースについて

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 503

wellxxx_

score 4

前提・実現したいこと

ある特定の機能開発の為masterブランチからtopicブランチを切り、
そこから小修正のブランチを切りtopicブランチにmerge、masterブランチにmergeの順で開発をしています。

masterブランチは綺麗なコミットを保ちたいですが↑のような形で行っていたため汚れています。
全て一纏めにできないかと考え以下の手順を実行しました。

コミットを綺麗にするために試したこと(rebaseする)

# ①topicブランチから新たにtestブランチ(仮)を作成
git co -b test origin/topic
# ②対象のコミット(mergeコミット含め)をまとめる
git rebase -i -p HEAD~~
git rebase --continue 
# ③↓で確認した際にコミットはまとまっている状態でした。
git log

発生している問題

rebaseを行ったtestブランチをmergeすることで、topicブランチのコミットログはtestブランチと同様になると考えていましたが、実際はtopicブランチのコミットは纏まらずmergeコミットが1件増えていました。

 

実際、どのような手順を取れば現状のmasterブランチのコミットログを綺麗にできたでしょうか。
また、

testブランチをmergeすることで、topicブランチのコミットログはtestブランチを同様になると考え

この考え方の間違いをご教授いただければと思い質問いたしました。

説明不足の点ございましたら、お手数ですがご指摘いただければ幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dameo

    2020/01/06 03:25

    すみませんが、gitは詳しくないので何を言っているのか全然分かりません。

    > git rebase -i -p HEAD~~
    の-iと-pは同時指定すべきではないはずです。
    これは何を意図したものですか?

    > git rebase --continue
    は、なぜ--continueが必要になったのですか?

    > # ③↓で確認した際にコミットはまとまっている状態でした。
    まとまっている状態とは何を指しているのですか?

    絶対に他の意味に取れないように記述してください
    また環境を記述し、他の人の環境で再現できるようにしてください

    例) 環境はUbuntu 19.04 git 2.20.1
    git init
    touch file1
    git add .
    git commit -m "1"
    touch file2
    git add .
    git commit -m "2"
    touch file3
    git add .
    git commit -m "3"
    git branch test
    git reset --hard HEAD~~
    git merge --squash test
    git commit
    (エディタでコミットログを編集します)
    git log --graph --stat --all

    なお、pushしたコミットを改変したいのであれば、pullしている人全員が持っているローカルコミットが全てゴミになるので注意してください

    キャンセル

  • dameo

    2020/01/06 03:27

    あと、gitのコマンドラインは視覚的ではないので、ややこしいことをする場合はGUIやIDEの方が楽だと思います

    キャンセル

回答 2

0

rebase するときに、push 先の remote branch を対象にすれば良いのですが。
git merge を行うと、a merge commit を作ってしまうので、使わない。

git checkout -b xxx origin/topic
== コード変更して、コミットを作成します ==
git commit -m "my commit"
== topic ブランチの変更にリベースをします ==
git pull --rebase
== topic リモートブランチにプッシュします ==
git push
== topic ブランチに移動 ==
git checkout topic
== 最新の状態に更新 ==
git pull
== master ブランチとリベース ==
git pull --rebase origin master
== master にプッシュ ==
git push origin master

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/13 10:18

    追記ですが、merge コミットを一度作ってしまうと、上流のbranch に残ってしまうため、残したくないのであれば作らないように、rebase を繰り返しておくと言うことです。複数あるコミットを一度まとめて rebase すると言うアプローチも取れます。

    キャンセル

0

実際、どのような手順を取れば現状のmasterブランチのコミットログを綺麗にできたでしょうか。

masterブランチをrebaseすれば、masterブランチのコミットログを一直線にできたはずです。

> testブランチをmergeすることで、topicブランチのコミットログはtestブランチを同様になると考え
この考え方の間違いをご教授いただければと思い質問いたしました。

gitにおける(Non-Fast-Forwardモードの)マージは、2つの親コミットを持つ新しいマージコミットを作成するという操作です。
2つの親を持つコミットが作成されるので、当然コミットログは一直線になりません。

言葉だと説明しづらいので、以下の図を確認してください。
イメージ説明

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る