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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Git

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

Q&A

解決済

1回答

1529閲覧

Git:内容が同じブランチなのに別々のコミットを指しているのでまとめる方法が知りたい

watopin

総合スコア2

Git

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

0グッド

0クリップ

投稿2022/06/22 01:32

git diff master develop
とやると何も出力されないので内容的には全く同じ状態なのですが、GitGraphで見るとmaster,developがそれぞれ別のコミットを指し示しております。
なんだか気持ち悪いのでこれを一本に統一したいのですがどのようなコマンドを行えばよいでしょうか。
またこのような分離はなぜ起きてしまうのでしょうか?(場合によってはよくある仕方のないことなのですか?)

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

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

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

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

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

guest

回答1

0

ベストアンサー

気をつけないとすぐに出るやつですね。

なんだか気持ち悪い

この感性はとても良いものです。

これを一本に統一したいのですがどのようなコマンドを行えばよいでしょうか。

短期的に解決する方法
→なぜそれが発生するのか?
→長期的にそれが発生しない防止策

以上の順番で解説していきます。

解決する為にはdevelopブランチを削除して
もう一度masterブランチからdevelopブランチを複製すれば良いのです。

bash

1$ git checkout master 2 3# 削除時のオプション-dは上位互換なら消せる、-Dは強制削除で消してしまう 4$ git branch -D develop 5 6$ git branch develop 7 8$ git checkout develop 9 10# -fオプションを付けて強制プッシュでGitHub等のリポジトリを更新する 11$ git push -f origin develop

この時developブランチは完全に消えてしまうので
怖いなら適当な名前で複製しておいても良いでしょう。


続いて発生原因
今回のようなケースの発生原因は様々ありますが
「GitはコミットIDしか見ていない」という事が重要です。

普段我々は作業が一息ついたらgit commit -m "コミットメッセージ"
コミット履歴を1個生成して積み上げる作業を行います。
この時コミットIDが生成されます、git log等でやたら長いハッシュIDみたいなのが生成されてそのIDを確認出来ます。

これはコミットの度に毎回異なるIDが生成されます。

前回のコミットにインデックスに上げたファイルを含めて再度コミットする
うっかりさん向けの機能git commit --amendというオプションが存在します。
これを使ってコミットIDが変わる事を確認してみましょう。

bash

1$ git checkout develop 2$ git checkout -b tmp 3 4$ git log 5# Less風のビューで戻れなくなったら「q」キーで終了させる 6 7# --amendオプションでコミットを作り直してIDが変わる事を確認する 8$ git commit --amend 9$ git log

これでtmpブランチとdevelopブランチはGitGraphで違う状態になっていることが確認できるでしょう。


再発防止策

1コミットを1目的として、
気軽にコミットIDの違う同じ修正を含めるなって話ですね。

起こりうるケースの例でGitブランチ戦略のGitflowで説明していきます。
Gitflowでは基本的にfeatureブランチを生成していき、developにプルリクエストを投げてコミット履歴を積み上げていきます。
それをリリースタイミングでdevelopからmasterにプルリクエストを投げてマージしてもらうという手段を取ります。
なのでmasterとdevelopが食い違う事なんてありえません。

しかしGitflowにはhotfixという緊急手段でmasterブランチを直接修正してしまう特例が存在します。
この後「develop側も同じ不具合出ているはずだから直しておいてね」という業務が発生する事になるのですが……
cherry-pickを使うとか、master→developにプルリクエスト投げておくとか
masterブランチのコミットをdevelopに複製するような解決手段を取る必要があります。

それをせずに、エディタを開いてdevelopで同じファイルを開いてコードを編集→コミット!とやってしまうと
質問文のような食い違った事が発生してしまいます。
これを踏まえて運用方法を考えて見てください

投稿2022/06/22 07:15

miyabi-sun

総合スコア21158

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問