1. ホーム
  2. git

[解決済み] リモートブランチからチェリーピックを行うには?

2022-04-21 13:46:30

質問

チェリーピックの実行に問題があります。私のローカルマシンでは、現在私の"master"ブランチにいます。私は、"zebra"という名前の別のブランチからコミットをチェリーピックしたいのです。この "zebra" ブランチは、リモートブランチです。

そこでgit status。

# On branch master
nothing to commit (working directory clean)

さて、今度は欲しいコミットをチェリーピックしてみます。

git cherry-pick xyz
fatal: bad object xyz

ここで、"xyz" はブランチ "zebra" で発生した、私が関心を持つコミットのシグネチャを表します。

そこでまず疑問に思うのは、なぜ git は私が参照しているコミットを見つけられないのだろうということです。正直なところ、これがそもそもどのように機能しているのかよくわかりません。git は他のすべてのブランチに対して、コミットのデータベースを作業ディレクトリにローカルに保存しているのでしょうか?cherry-pick コマンドを実行するときに、そのローカルのデータベースを検索して私が話しているコミットを見つけるのでしょうか?

zebra"はリモートブランチなので、ローカルにそのデータがないのではと思ったのですが。ということで、ブランチを切り替えました。

git checkout zebra
Switched to branch 'zebra'

そして今、私のローカルマシンで、ディレクトリ内のファイルがzebraの状態を正しく反映していることが確認できます。masterに戻り、もう一度cherry-pickしてみましたが(コミットデータが利用可能であることを期待して)、同じ問題が発生しました。

根本的に誤解しているようなので、何かご教示いただければ幸いです。

どのように解決するのですか?

<ブロッククオート

zebra"はリモートブランチなので、そのデータを持っていないと思っていたのです。 をローカルに表示します。

正しいデータを持っていないのは正しいのですが、間違った方法で解決しようとしました。リモート・ソースからローカルにデータを収集するためには git fetch . あなたが git checkout zebra を実行すると、前回フェッチしたときのブランチの状態に切り替わります。ですから、まずリモートから取得するようにしましょう。

# fetch just the one remote
git fetch <remote>
# or fetch from all remotes
git fetch --all
# make sure you're back on the branch you want to cherry-pick to
git cherry-pick xyz