TortoiseGit Pullでリモートブランチとマージ後Pushする1/2

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

TortoiseGit ダウンロードとインストール1

TortoiseGit-2.17.0.2-64bit を使用します。

プルを行ったきっかけ

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

TortoiseGit Pullでリモートブランチとマージ後Pushする1
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’ にプッシュできませんでした
ヒント: リモートに含まれていない作業が含まれているため、更新は拒否されました。
ヒント: ローカルにあります。これは通常、別のリポジトリがプッシュすることによって発生します。
ヒント: 同じ参考文献。リモートの変更を統合する場合は、次を使用します。
ヒント: 再度プッシュする前に「git pull」してください。
ヒント: 詳細については、「git Push –help」の「早送りに関する注意」を参照してください。

上記のエラーメッセージの Google 翻訳

先ほどのエラーが表示されたダイアログの左下の「プル」ボタンを押して、「プル」ダイアログを表示します。
※「プル」ダイアログは、ローカルリポジトリのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「プル」で開けます。

「リモート」枠の「リモート」ラジオボタンを選択して、リモートリポジトリを指すリモート名を選択します。
※リモート名は、「リモート管理」リンクをクリックして表示される「設定」ダイアログの「Git」→「リモート」ページで作成・編集できます。

「リモートブランチ」項目では、そのリモートリポジトリの、プル対象のブランチ名を入力します。

「オプション」枠は、デフォルトでチェックされていた状態(タグ、リモートに無いブランチを削除のみチェック)です。

「Putty 鍵の自動ロード」は今回使用しないのでオフにしています。

設定が済んだら OK ボタンを押します。

TortoiseGit Pullでリモートブランチとマージ後Pushする2

プルが成功しました。

TortoiseGit Pullでリモートブランチとマージ後Pushする3
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 using git rebase --rebase-merges so 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.rebasebranch.<name>.rebase and branch.autoSetupRebase in git-config[1] if you want to make git pull always use --rebase instead of merging.

git pull でマージではなく常に –rebase を使用するようにしたい場合は、git-config[1] の pull.rebase、branch..rebase、branch.autoSetupRebase を参照してください。

NoteThis 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] を注意深く読んでいない限り、このオプションは使用しないでください。

–no-rebase

This is shorthand for –rebase=false.
これは –rebase=false の短縮形です。

Git – git-pull Documentation と Google 翻訳

プル後の状態の確認

「プル」を実行したダイアログの左下の「プルした差分」ボタンを押すと、プル前後の差分を確認できます。
※「変更されたファイル」ダイアログは、ローカルリポジトリのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「前のバージョンとの差分」で開けます。

下側のリストのファイル右クリックして表示されるメニュー「リビジョンの比較」を選択すると、そのファイルの差分を確認できます。

TortoiseGit Pullでリモートブランチとマージ後Pushする4

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

TortoiseGit Pullでリモートブランチとマージ後Pushする5

次に、「リビジョングラフ」ダイアログでプルの後のブランチなどの状態を確認します。

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

TortoiseGit Pullでリモートブランチとマージ後Pushする6

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

TortoiseGit Pullでリモートブランチとマージ後Pushする7

他も同様に確認すると、以下のコミットがそれぞれのコミット履歴の最新コミットでした。
上側の方が新しいコミットを持っていることが確認できました。

  1. develop ローカルブランチ:プルによるマージ後のコミット
  2. origin/develop リモートブランチ:プル時のリモートブランチの最新のコミット
  3. コミットオブジェクト(280dde11) :リポジトリの最初のコミット
TortoiseGit Pullでリモートブランチとマージ後Pushする8

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

今回はここまで

  • TortoiseGitプルを行い、差分を確認しました。
  • 古いコミット履歴を持つローカルブランチから、新しいコミット履歴を持つリモートブランチにコミットをプッシュすると、エラーが発生して、プルを行うように提案されます。
  • プルによって、リモートブランチの全てのコミット履歴をローカルブランチに取得できます。
  • プルで –no-rebase オプションを指定すると、自動的にマージが行われ、そのマージのコミットが最新のコミット履歴になります。
  • プルの前後の差分は「変更されたファイル」ダイアログで確認できます。
  • コミット履歴は、リビジョングラフログメッセージなどのダイアログで確認できます。

次回に続きます。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました