🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

Q&A

2回答

621閲覧

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

wellxxx_

総合スコア4

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

1グッド

0クリップ

投稿2020/01/05 04:58

前提・実現したいこと

ある特定の機能開発の為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ブランチを同様になると考え

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

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

退会済みユーザー👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/05 18: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している人全員が持っているローカルコミットが全てゴミになるので注意してください
退会済みユーザー

退会済みユーザー

2020/01/05 18:27

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

回答2

0

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

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

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

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

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

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

投稿2020/01/16 13:32

編集2020/01/16 13:38
ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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/07 06:04

mmaeda

総合スコア269

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmaeda

2020/01/13 01:18

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問