異なるリポジトリに対してコミットする方法について説明します。
レアケースだとは思いますが現在のログを引き継がず、新規履歴として登録したい場合に使用します。
やり方は色々ありますが、自分が使用していて一番しっくり来た流れを紹介します。
反映したいブランチを「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