![見出し画像](https://assets.st-note.com/production/uploads/images/116299424/rectangle_large_type_2_632d9eb2ee4e072ead1c5a2ba0ca44e0.png?width=1200)
Photo by
golchiki
git fetchとgit rebaseに苦しめられた話
リモートとローカルのmasterブランチに差があった際下記コマンドを実行した。git fetch と git rebaseの使い所がわからなかったため備忘録として。
git fetch
git rebase origin/master(作成したブランチで)
git push -f
※今回はリモートで削除されていたモジュールがありモジュール.info.ymlファイルが削除されていた。ローカルにはそのモジュールが存在していたため、リモートからモジュールを削除されている状態のコミット内容を取ってくる、という作業がgit pushする前に必要だった
git fetch
masterブランチから自分のブランチにはないコミットの内容だけ取ってくる
mergeは行わない
リモートのmasterブランチから自分のローカルの追跡ブランチに最新コミットの内容を取ってくる
=自分のローカルのmasterブランチにはmergeしていない
そもそも、追跡ブランチという経由地がある。
![](https://assets.st-note.com/img/1694815346691-OSdUZb8r17.png?width=1200)
git rebase
masterブランチから自分のブランチへ特定のコミットの内容だけ取ってくる
mergeは行わない
自分のローカルの各ブランチから自分のローカルの追跡ブランチへコミット内容を結合させる
mergeは行わない
![](https://assets.st-note.com/img/1694817433894-5yNd8TcxIJ.png?width=1200)
そもそも、ローカルには下記3つのブランチが存在している。
1. 追跡ブランチ
2. masterブランチ
3. 各ブランチ
まとめると、今回は追跡ブランチへgit fetchでコミット内容を取得し
git rebaseで各ブランチで変更した内容と取得したコミット内容をくっつけて
強制的にpushした(リモートとローカルの内容が違うので警告が出る)
![](https://assets.st-note.com/img/1695104527944-tZS2ENY1Vz.jpg?width=1200)
![](https://assets.st-note.com/img/1695104527955-5ekTFiTjHN.jpg?width=1200)
まだ、完璧には理解していないけどとりあえず「追跡ブランチが存在していてgit fetch git rebaseする際には関係している」という認識になった。
この記事が気に入ったらサポートをしてみませんか?