git diff master develop
とやると何も出力されないので内容的には全く同じ状態なのですが、GitGraphで見るとmaster,developがそれぞれ別のコミットを指し示しております。
なんだか気持ち悪いのでこれを一本に統一したいのですがどのようなコマンドを行えばよいでしょうか。
またこのような分離はなぜ起きてしまうのでしょうか?(場合によってはよくある仕方のないことなのですか?)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答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
総合スコア21393
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。