私は異なるファイルに対していくつかのコミットをしましたが、これまでのところ私は特定のコミットだけをリモートリポジトリにプッシュしたいと思います。
それは可能ですか?
与えられたコミットをup throughするためには、次のように書くことができます。
git Push <remotename> <commit SHA>:<remotebranchname>
提供された<remotebranchname>
はすでにリモートに存在します。 (そうでない場合は、git Push <remotename> <commit SHA>:refs/heads/<remotebranchname>
を使用して自動作成することができます。)
以前のコミットをプッシュするwithoutをプッシュしたい場合は、最初にgit rebase -i
を使用してコミットを並べ替える必要があります。
提案された解決策を試みました:
git Push <remotename> <commit SHA>:<remotebranchname>
このような:
git Push Origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
私の場合、masterは5コミット先で、最後のコミットをプッシュしたいだけでしたが、上記でコミットされたコミットまでのすべての変更がプッシュされました。私にとっては、チェリーピック方式がこのユースケースにはより良いアプローチである可能性があります。
他の答えは並べ替えの説明に欠けています。
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
私のリモートマスターブランチにシングルコミットをプッシュする。
参考文献:
また見なさい:
git rebase -i
を使うことをお勧めします。プッシュしたいコミットを行ったコミットの一番上に移動します。それからgit log
を使って、リベースされたコミットのSHAを取得し、チェックアウトしてからプッシュします。リベースはあなたの他の全てのコミットがあなたがプッシュしたコミットの子になることを確実にするでしょう、それで将来のプッシュもうまくいくでしょう。
チェリーピックは、特定のコミットを推進しながら、他のすべての方法と比較して最も効果的に機能します。
その方法は次のとおりです。
新しいブランチを作る -
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
を実行して、すべてが望みどおりに見えることを確認します。
私はあなたがそのコミットに "git revert"してからそれをプッシュする必要があると思います。あるいは、cherry-pick
で新しいブランチへのコミットを行い、それをリモートリポジトリのブランチにプッシュすることもできます。何かのようなもの:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git Push Origin {branch}