エクスプローラで Git 操作ができるクライアントソフト TortoiseGit を用いて、リモートブランチのコミット履歴をローカルブランチにプル(取得と統合)します。
プルの際に、ローカルブランチにだけ存在するコミット履歴をリモートブランチから引き入れたコミット履歴とマージし、そのマージのコミット履歴をリモートブランチにプッシュして、結果を確認します。

※ TortoiseGit-2.17.0.2-64bit を使用します。
プルを行ったきっかけ
プルを行ったきっかけは、ローカルブランチで行った変更のコミットを、リモートブランチにプッシュしようとした際に発生したエラーです。

git.exe push --progress -- "origin" develop:develop
To G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-fit-font-size.git
! [rejected] develop -> develop (fetch first)
error: failed to push some refs to 'G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-fit-font-size.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
gitは正常に終了しませんでした (終了コード 1) (391 ms @ 2025/09/19 12:22:20)
プッシュに失敗した理由は、プッシュ元のローカルブランチが、プッシュ先のリモートブランチの全てのコミット履歴を持たない、古い状態のリポジトリにコミットして、それをプッシュしようとしたせいでした。
Gitが「リモートの変更を無視して上書きしようとしている」と判断して、プッシュを拒否したと考えられます。
これに対処するヒントとして、プッシュの前に git pull を行い、リモートブランチの全てのコミット履歴をローカルブランチに取り込むことが提案されました。
エラー: 一部の参照を ‘G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-fit-font-size.git’ にプッシュできませんでした
上記のエラーメッセージの Google 翻訳
ヒント: リモートに含まれていない作業が含まれているため、更新は拒否されました。
ヒント: ローカルにあります。これは通常、別のリポジトリがプッシュすることによって発生します。
ヒント: 同じ参考文献。リモートの変更を統合する場合は、次を使用します。
ヒント: 再度プッシュする前に「git pull」してください。
ヒント: 詳細については、「git Push –help」の「早送りに関する注意」を参照してください。
先ほどのエラーが表示されたダイアログの左下の「プル」ボタンを押して、「プル」ダイアログを表示します。
※「プル」ダイアログは、ローカルリポジトリのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「プル」で開けます。
「リモート」枠の「リモート」ラジオボタンを選択して、リモートリポジトリを指すリモート名を選択します。
※リモート名は、「リモート管理」リンクをクリックして表示される「設定」ダイアログの「Git」→「リモート」ページで作成・編集できます。
「リモートブランチ」項目では、そのリモートリポジトリの、プルの対象のブランチ名を入力します。
「オプション」枠は、デフォルトでチェックされていた状態(タグ、リモートに無いブランチを削除のみチェック)です。
「Putty 鍵の自動ロード」は今回使用しないのでオフにしています。
設定が済んだら OK ボタンを押します。

プルが成功しました。

git.exe pull --progress -v --no-rebase -- "origin" develop
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
From G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-fit-font-size
* branch develop -> FETCH_HEAD
1be13c2..1655b72 develop -> origin/develop
Merge made by the 'ort' strategy.
sc_fit_font_size_dialog.tscn | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
成功 (938 ms @ 2025/09/19 12:25:41)
–no-rebase オプションが指定されているため、リモートブランチからのコミット履歴の取得後、ローカルブランチのコミット履歴と統合するために、ローカルブランチにマージが自動的に行われました。
Fetch from and integrate with another repository or a local branch
別のリポジトリまたはローカル ブランチからフェッチして統合する-r
–rebase[=(false|true|merges|interactive)]When true, rebase the current branch on top of the upstream branch after fetching. If there is a remote-tracking branch corresponding to the upstream branch and the upstream branch was rebased since last fetched, the rebase uses that information to avoid rebasing non-local changes.
true の場合、フェッチ後に現在のブランチを上流ブランチの上にリベースします。上流ブランチに対応するリモート追跡ブランチがあり、最後にフェッチされてから上流ブランチがリベースされている場合、リベースはその情報を使用して、非ローカルな変更のリベースを回避します。
When set to
merges, rebase usinggitrebase--rebase-mergesso that the local merge commits are included in the rebase (see git-rebase[1] for details).マージに設定した場合は、git rebase –rebase-merges を使用してリベースし、ローカル マージ コミットがリベースに含まれるようにします(詳細については git-rebase[1] を参照)。
When false, merge the upstream branch into the current branch.
false の場合、上流ブランチを現在のブランチにマージします。When
interactive, enable the interactive mode of rebase.
インタラクティブな場合は、リベースのインタラクティブ モードを有効にします。See
pull.rebase,branch.<name>.rebaseandbranch.autoSetupRebasein git-config[1] if you want to makegitpullalways use--rebaseinstead of merging.git pull でマージではなく常に –rebase を使用するようにしたい場合は、git-config[1] の pull.rebase、branch..rebase、branch.autoSetupRebase を参照してください。
Note This is a potentially dangerous mode of operation. It rewrites history, which does not bode well when you published that history already. Do not use this option unless you have read git-rebase[1] carefully.
これは潜在的に危険な操作モードです。それは歴史を書き換えますが、その歴史をすでに公開している場合、それは良い前兆ではありません。 git-rebase[1] を注意深く読んでいない限り、このオプションは使用しないでください。This is shorthand for –rebase=false.
Git – git-pull Documentation と Google 翻訳
これは –rebase=false の短縮形です。
プル後の状態の確認
「プル」を実行したダイアログの左下の「プルした差分」ボタンを押すと、プルの前後の差分を確認できます。
※「変更されたファイル」ダイアログは、ローカルリポジトリのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「前のバージョンとの差分」で開けます。
下側のリストのファイルを右クリックして表示されるメニュー「リビジョンの比較」を選択すると、そのファイルの差分を確認できます。

.tscn (GodotEngine4 のシーンファイル)の差分を確認できました。

次に、「リビジョングラフ」ダイアログでプルの後のブランチなどの状態を確認します。
グラフのブランチやコミットオブジェクトを右クリックして表示されるメニュー「ログを表示」で「ログメッセージ」ダイアログを表示すると、それぞれの持つコミット履歴を確認できます。

上図のグラフの1番上にある develop ローカルブランチのコミット履歴を見ると、プルの際に行われたリモートブランチのコミット履歴とのマージのコミットが確認できます。

他も同様に確認すると、以下のコミットがそれぞれのコミット履歴の最新コミットでした。
上側の方が新しいコミットを持っていることが確認できました。
- develop ローカルブランチ:プルによるマージ後のコミット
- origin/develop リモートブランチ:プル時のリモートブランチの最新のコミット
- コミットオブジェクト(280dde11) :リポジトリの最初のコミット

以下の3つの画像は、それぞれの「ログメッセージ」ダイアログのスクリーンショットです。



今回はここまで
- TortoiseGit でプルを行い、差分を確認しました。
- 古いコミット履歴を持つローカルブランチから、新しいコミット履歴を持つリモートブランチにコミットをプッシュすると、エラーが発生して、プルを行うように提案されます。
- プルによって、リモートブランチの全てのコミット履歴をローカルブランチに取得できます。
- プルで –no-rebase オプションを指定すると、自動的にマージが行われ、そのマージのコミットが最新のコミット履歴になります。
- プルの前後の差分は「変更されたファイル」ダイアログで確認できます。
- コミット履歴は、リビジョングラフやログメッセージなどのダイアログで確認できます。
次回に続きます。
参照サイト Thank You!
- Git
- Git – git-submodule Documentation
- Git – サブモジュール
- Git – git-pull Documentation
- Git – git-push Documentation
- TortoiseGit – Windows Shell Interface to Git
記事一覧 → Compota-Soft-Press
コメント