【Git】別のリポジトリに履歴を引き継がないでコミットする

git

異なるリポジトリに対してコミットする方法について説明します。
レアケースだとは思いますが現在のログを引き継がず、新規履歴として登録したい場合に使用します。

やり方は色々ありますが、自分が使用していて一番しっくり来た流れを紹介します。

反映したいブランチを「origin」、元のリポジトリを「upstream」として説明します。

[準備]参照元のリポジトリをリモートに設定する

元のリポジトリを「upstream」としてリモートに設定します。

git remote add upstream [リポジトリURLなど]

一度設定すれば再度実行する必要はありません。

以下コマンドで remote の登録状態が確認できます。

git remote -v

リモートの状態を反映

リモートの更新を反映します。

git fetch origin
git fetch upstream

ブランチを作成

変更を反映しリモートにプッシュするためのブランチを作成します。
develop ブランチから派生させる例として説明します。

git checkout develop
git pull
git checkout -b feature/xxxxx
git push -u origin feature/xxxxx

ログを確認

反映したいコミットのハッシュを確認します。
たとえば「main」ブランチへのマージコミット(最新)を確認する場合は以下コマンドで確認できます。

git log upstream/master --oneline -1

最初に出てきた先頭の文字列がコミットハッシュになります。

コミット (cherry-pick)

cherry pick を使用してコミットします。

git cherry-pick -m 1 [コミットハッシュ] -e

-e オプションでコメントを編集します。

あとは内容を確認して push して完了です。

[NG] しっくりこなかったコマンド

以下コマンドでも似たようなことができますが、コミット履歴が引き継がれたためやめました。

git merge --allow-unrelated-histories -squash upstream/master
タイトルとURLをコピーしました