0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub不要!ローカルGitリポジトリを履歴ごと統合する方法

0
Last updated at Posted at 2026-06-30

はじめに

開発を進めていると、「別々に作っていた試作コードやPoCの成果物を、メインの開発リポジトリに統合したい」という場面が出てくることがあります。

単にファイルをコピーするだけなら簡単ですが、それだと過去のコミットメッセージや「誰がいつ変更したか」という大切な変更履歴がすべて消えてしまいます。

この記事では、GitHubなどの外部サーバーを一切使わず、手元のPC(ローカル環境)だけで、2つの異なるGitリポジトリの履歴を保持したまま統合する手順を解説します。

なお、Gitの基本操作(addcommitmerge)は知っている前提で進めます。

最後に、Windows環境などで発生しやすい「後片付け時のフォルダロックエラー」の原因と対処法も合わせて紹介します。


結論:Gitの「リモート」にはローカルパスを指定できる

Gitの解説記事では、git remote add コマンドの接続先にGitHubなどのURL(https://...)を指定することがほとんどです。

しかし、Gitの仕組み上、「自分のPC内にある別のフォルダパス」をそのままリモート先として登録することが可能です。

これを利用すれば、外部ネットワークに一切データを送信することなく、安全にリポジトリをマージできます。


統合の手順

今回は、メインとなるリポジトリ(repository-A)に、別で開発していたリポジトリ(repository-B)を取り込む例で解説します。

1. メインのリポジトリ(A)に移動する

cd /path/to/repository-A

2. 取り込みたいリポジトリ(B)をローカルパスで登録する

git remote add temp-remote /path/to/repository-B

Windows環境でネットワークドライブ(O:\ など)上にある場合も、そのパスをそのまま指定できます。ただし Git Bash を使う場合は /o/... 形式で指定してください(PowerShell・コマンドプロンプトでは O:\ 形式で問題ありません)。

3. データを取得(fetch)する

git fetch temp-remote

このコマンドにより、repository-B のコミット履歴やブランチ情報がローカルに取り込まれます。ネットワーク通信は発生せず、通常は短時間で完了します。

4. 履歴を統合する

git merge temp-remote/main --allow-unrelated-histories -m "repository-Bを統合"

取り込みたい側のブランチ名(mainmaster など)に合わせて適宜変更してください。

--allow-unrelated-histories は、共通の祖先を持たない2つの履歴をマージするために必要なオプションです。このオプションなしで実行すると、Gitはデフォルトでマージを拒否します。


注意:同じファイルが存在する場合はコンフリクトする

この方法は履歴だけではなくファイル内容もマージします。そのため、両リポジトリに同じパスのファイルが存在する場合は、通常のGitマージと同様にコンフリクトが発生します。

例えば、以下のような構成の場合は README.md が競合します。

repository-A/    repository-B/
├ README.md      ├ README.md
└ src/           └ docs/

コンフリクトが発生した場合は、対象ファイルを手動で編集して内容を解消したあと、通常のマージ完了手順で対応します。

git add README.md
git commit

5. 後片付け(リモート設定の削除)

git remote remove temp-remote

正常に完了すれば作業はこれで終了です。


統合できたか確認するコマンド

コミットグラフを確認

git log --graph --oneline --all

2本の線が合流する形になっていて、Bのコミット履歴が確認できれば成功です。

リモート設定の確認

git remote -v

temp-remote が表示されなければ問題ありません。


削除エラーが出る場合

git remote remove 実行時に、以下のようなエラーが出ることがあります。

Deletion of directory '.git/logs/refs/remotes/temp-remote' failed. Should I try again? (y/n)

原因:複数プロセスによるファイルロック

主な原因は以下のとおりです。

  • VS Code(内部ターミナル含む)と外部ターミナルの併用
  • エクスプローラーでフォルダを開いている
  • ウイルス対策ソフトのスキャン
  • ネットワークドライブ環境

特に外部ターミナルとVS Codeの内部ターミナルを同時に立ち上げて作業している場合、プロセスがファイルをロックしやすくなります。

対処法

① ターミナルを1つにする

開いているターミナルを整理・集約してから再実行します。

git remote remove temp-remote

② 強制削除

ロックが解除されない場合は、OSコマンドで直接該当の参照を削除します。

PowerShell:

Remove-Item -Recurse -Force .git\refs\remotes\temp-remote
Remove-Item -Recurse -Force .git\logs\refs\remotes\temp-remote

Git Bash:

rm -rf .git/refs/remotes/temp-remote
rm -rf .git/logs/refs/remotes/temp-remote

③ configを掃除する

設定ファイルにセクションが残っていないか確認します。

git config --local --list

残っている場合は以下のコマンドで削除します。

git config --local --remove-section remote.temp-remote

おわりに

Gitは分散型バージョン管理システムであるため、サーバーがなくてもローカル同士で柔軟に履歴をやり取りできます。

コミット履歴には、バグ修正の経緯・設計の意図・変更理由といった重要な情報が含まれています。リポジトリを統合する際は、単なるファイルコピーではなく、履歴を保ったまま統合する方法もぜひ活用してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?