HOWTO · Git

特定のコミットをリモート リポジトリにプッシュする

リモート Git リポジトリにプッシュするコミットを指定できます。

この記事では、特定のコミットを Git のリモート リポジトリにプッシュするプロセスの概要を説明します。 いくつかのコミットを含む Git リポジトリがあり、1つのコミットのみをプッシュする必要があるとしたら、どうすればよいでしょうか?

特定のコミットをリモート リポジトリにプッシュする

単一のコミットをリモート リポジトリにプッシュするには、以下に示すコンテキストで Git プッシュ コマンドを使用します。

$ git push <remote> <commit id>:<remote branch>

いつものように、概念を説明するために例を使用します。

以下の例は、下の画像に示すように、4つのコミットを持つ Demo リポジトリを示しています。

コミット履歴

initial コミットをリモート リポジトリにプッシュしたいとします。 どうすればいいでしょうか?

初めてリモート リポジトリにプッシュする場合は、次の手順に従います。

まず、以下に示すように、リモート リポジトリをローカル リポジトリに追加します。

$ git remote add origin https://github.com/Wachira11ke/Demo.git

initial コミットをリモートにプッシュするには、以下を実行します。

$ git push origin 6b0f31a:refs/heads/master

初めてリモートにプッシュするので、refs/heads/master 引数を使用して、リモート リポジトリに master ブランチを作成する必要があります。 このコマンドは、Initial コミットのみをリモート リポジトリにプッシュします。

最初のコミット、つまり ライセンスの更新 のみをプッシュしたい場合はどうすればよいでしょうか?

git push origin c87321d:master を実行しても、目的の効果は得られません。

これは、Git が指定されたコミットを含むすべてのコミットをプッシュするためです。 私たちはそれを望んでいませんよね?

最初のコミットが最後になるように、コミットを再配置する必要があります。 Update Licenses コミットは、Initial commit の直後に行う必要があります。

以下に示すように、対話モードで git rebase コマンドを実行することでこれを行うことができます。

$ git rebase -i HEAD~3

このコマンドは、テキスト エディターを開きます。 以下に示すように、pick コマンドを使用してコミットを並べ替えます。

git rebase

これで、テキスト エディターを終了して、リベースを完了できます。 コミット履歴は次のようになります。

コミット履歴 2

以下に示すように、コミットをリモート リポジトリにプッシュできるようになりました。

$ git push origin 20136f7:master

リモート リポジトリには 2つのコミットのみを含める必要があります。

  1. 初期コミット コミット
  2. Update Licenses コミット。

私たちのケースを確認しましょう。

リモート リポジトリ

そこにあります。

結論として、git push <remote> <commit id>:<remote branch> を使用すると、特定のコミットをリモート リポジトリにプッシュできます。

ただし、このコマンドは、指定されたコミットを含むすべてのコミットをプッシュします。 これを改善するには、説明したように、git rebase コマンドを使用してコミットを再配置する必要があります。