laravel12.git5
R e i - D r e a m
for Laravel
TOP > Laravel Ver.12 > 環境構築(GitHub 5)RESET
Guest
login

最終投稿日:2025年12月09日

Git操作 RESET([soft][mixed][hard])
[soft][mixed]モード
基本的な動作は同じです。
コミット履歴を指定した《ID》まで戻しますが、編集した内容は変わりません。
モードの違いは以下です
 [soft]・・・変更内容がステージングに残ります
 [mixed] ・・変更内容がステージングから消えます(オプション省略可)
つまり[soft]の場合だと、コミットする際に『git add .』が不要になるだけです。
[hard]モード
 [hard]・・・編集した内容も消えます。
reset --soft の詳細説明
リモート①  リモート②  ローカル
   |       |      |
 1234567     |      |
   |      1234567     |
   |       |     1234567
   |       |      |
   |       |     2345678 コミット①
   |       |      |
   |       |     3456789 コミット②
   |      3456789     |
   |       |     4567890 コミット③
例えば上記の様な履歴を持つブランチがあります。
 [リモート①]・・・[develop] ⇒ 準本番ブランチ
 [リモート②]・・・[dev_PJ1] ⇒ 準本番ブランチから派生させた開発ブランチ
 [ローカル]・・・・[dev_PJ1] ⇒ 開発ブランチローカル用
ローカルでは『コミット』を3回実施しています。
また2回目のコミットは、リモートへプッシュされています(ID:3456789
開発者は『管理者はどうせ[develop]にスカッシュマージなんかしないよなぁ』と思い、
ローカルのコミット履歴を整理したいと考えました。
さてローカルの『dev_PJ1』はどこまで【reset】できるでしょうか?
答えは《コミット②》までです。
何故かというと《ID:2345678》まで履歴を戻すと、リモート側のブランチと整合性が合わなくなるためです。
よって以下コマンドで履歴を整理します。
reset --soft

git reset --soft 3456789

git commit -m "履歴を整理"

git push origin dev_PJ1

リモート①  リモート②  ローカル
   |       |      |
 1234567     |      |
   |      1234567     |
   |       |     1234567
   |       |      |
   |       |     2345678 コミット①
   |       |      |
   |       |     3456789 コミット②
   |      3456789     |
   |       |     5678901 コミット④(履歴を整理)
   |      5678901     |
これで整合性を崩さずにリモート側の[dev_PJ1]と同期がとれました。
しかしよく見るとコミット数は同じです。。
リモートとローカルのブランチ『dev_PJ1』は開発者が自由にできるものです。
整合性を崩してはいけないのは、準本番ブランチである『develop』です。
[develop]の履歴は《ID:1234567》なので、このIDまでなら誰にも迷惑はかけないハズです。
そこで開発者は以下コマンドを叩いてしまいます。
大丈夫?

git reset --soft 1234567

git commit -m "履歴を完全に整理"

これで自身のコミット履歴は完全に綺麗になりました。
リモート①  リモート②  ローカル
   |       |      |
 1234567     |      |
   |      1234567     |
   |       |     1234567
   |       |      |
   |      3456789     |
   |       |      |
   |      5678901     |
   |       |     6789012 コミット⑤(履歴を完全に整理)
しかし開発者は以下のコマンドを叩いて絶望します。
エラーだよね。。

git push origin dev_PJ1

当然IDが合わないのでエラーとなります。。orz
しかし、ブランチ『dev_PJ1』に関してはリモート共に自分のみ管理するものです。
開発者はここで【強制プッシュ】を実行します。
強制プッシュ!!

git push -f origin dev_PJ1

無事プッシュでき、各ブランチのIDの整合性も保たれています。
リモート①  リモート②  ローカル
   |       |      |
 1234567     |      |
   |      1234567     |
   |       |     1234567
   |       |      |
   |       |     6789012 コミット⑤(履歴を完全に整理)
   |      6789012     |
無事《リモート:dev_PJ1》《ローカル:dev_PJ1》の整合性が整いました。
きっぷる
ログインしてコメントを残そう!!


きっぷる