web-dev-qa-db-ja.com

以前のコミットではなく、特定のコミットをリモートにプッシュする方法を教えてください。

私は異なるファイルに対していくつかのコミットをしましたが、これまでのところ私は特定のコミットだけをリモートリポジトリにプッシュしたいと思います。

それは可能ですか?

736
Robert23

与えられたコミットをup throughするためには、次のように書くことができます。

git Push <remotename> <commit SHA>:<remotebranchname>

提供された<remotebranchname>はすでにリモートに存在します。 (そうでない場合は、git Push <remotename> <commit SHA>:refs/heads/<remotebranchname>を使用して自動作成することができます。)

以前のコミットをプッシュするwithoutをプッシュしたい場合は、最初にgit rebase -iを使用してコミットを並べ替える必要があります。

936
Geoff Reedy

提案された解決策を試みました:

git Push <remotename> <commit SHA>:<remotebranchname>

このような:

git Push Origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master

私の場合、masterは5コミット先で、最後のコミットをプッシュしたいだけでしたが、上記でコミットされたコミットまでのすべての変更がプッシュされました。私にとっては、チェリーピック方式がこのユースケースにはより良いアプローチである可能性があります。

139
Sam M

他の答えは並べ替えの説明に欠けています。

git Push <remotename> <commit SHA>:<remotebranchname>

1つのコミットをプッシュしますが、そのコミットはローカルのプッシュされていないコミットのOLDESTである必要があります。トップコミット、ファーストコミット、またはチップコミットと混同しないでください。コミットは、最も古いコミット、つまり最も最近のコミットから最も遠いコミットに必要です。それが最も古いコミットではない場合、あなたの最も古い、ローカルの、プッシュされていないSHAから指定されたSHAへのコミットがすべてプッシュされます。コミットを並べ替えるには:

git rebase -i HEAD~xxx

コミットの順序を変更したら、安全にリモートリポジトリにプッシュできます。

まとめると、私は使った

git rebase -i HEAD~<number of commits to SHA>
git Push Origin <post-rebase SHA>:master

私のリモートマスターブランチにシングルコミットをプッシュする。

参考文献:

  1. http://blog.dennisrobinson.name/Push-only-one-commit-with-git/ /
  2. http://blog.dennisrobinson.name/reorder-commits-with-git/

また見なさい:

  1. git:ローカルのリベースとそれに続くプルの後にコミットが重複する
  2. git:シングルコミットのプッシュ、リベースによる並べ替え、コミットの重複
61
Samuel

git rebase -iを使うことをお勧めします。プッシュしたいコミットを行ったコミットの一番上に移動します。それからgit logを使って、リベースされたコミットのSHAを取得し、チェックアウトしてからプッシュします。リベースはあなたの他の全てのコミットがあなたがプッシュしたコミットの子になることを確実にするでしょう、それで将来のプッシュもうまくいくでしょう。

25
Walter Mundt

チェリーピックは、特定のコミットを推進しながら、他のすべての方法と比較して最も効果的に機能します。

その方法は次のとおりです。

新しいブランチを作る -

git branch <new-branch>

新しいブランチをOriginのブランチで更新します -

git fetch

git rebase

これらの行動はあなたがあなたのOriginが持っているものと全く同じものを持っていることを確認するでしょう。

やりたいsha idを選んでください -

git cherry-pick <sha id of the commit>

あなたはsha idを実行することによって得ることができます

git log

あなたの起源にそれをプッシュ -

git Push

gitkを実行して、すべてが望みどおりに見えることを確認します。

20
David

私はあなたがそのコミットに "git revert"してからそれをプッシュする必要があると思います。あるいは、cherry-pickで新しいブランチへのコミットを行い、それをリモートリポジトリのブランチにプッシュすることもできます。何かのようなもの:

git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git Push Origin {branch}
11
Josh K