916

最初のことを何も知らない別のgitリポジトリからのコミットが必要なgitリポジトリで作業しています。

通常、私はHEAD@{x}reflog で を使用してチェリー ピックしますが、これ.gitはこの reflog エントリ (別の物理ディレクトリ) を何も知らないため、どうすればこれをチェリー ピックできますか?

を使用してgit-svnいます。私の最初のブランチはSubversion リポジトリを使用git-svntrunkており、次のブランチはgit-svnSubversion ブランチを使用しています。

4

12 に答える 12

976

与えられた答えは format-patch を使用することですが、問題は別のフォルダーからチェリーピックする方法だったので、それを行うためのコードを次に示します。

$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k

Cong Maコメントからの説明 2014 年 8 月 28 日

git format-patch コマンドは、SHA で指定された some_other_repo のコミットからパッチを作成します (単一のコミットのみの場合は -1)。このパッチは git am にパイプされ、パッチがローカルに適用されます (-3 は、パッチが正常に適用されなかった場合に 3 方向マージを試行することを意味します)。

于 2012-02-29T22:06:43.730 に答える
768

他のリポジトリをリモートとして追加してから、その変更をフェッチする必要があります。そこからコミットが表示され、チェリーピックできます。

そのように:

git remote add other https://example.link/repository.git
git fetch other

これで、簡単に実行できるすべての情報が得られましたgit cherry-pick

完了したら、リモートが不要になった場合は、リモートを再度削除することをお勧めします。

git remote remove other

リモートでの作業に関する詳細情報: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

于 2011-02-25T16:50:46.200 に答える
180

これは、リモート フェッチ マージの例です。

cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB

次に、次のことができます。

git cherry-pick <first_commit>..<last_commit>

または、ブランチ全体をマージすることもできます(本当にすべてをマージする必要がある場合のみ)

git merge projectB/master
于 2012-07-13T20:20:11.450 に答える
168

実行できますが、2 つの手順が必要です。方法は次のとおりです。

git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD

<remote-git-url>チェリーピックしたいリポジトリへの URL またはパスに置き換えます。

<branch>リモート リポジトリからチェリー ピックするブランチまたはタグ名に置き換えます。

FETCH_HEADブランチからの git SHA に置き換えることができます。

更新: @pkalinow のフィードバックに基づいて変更されました。

于 2013-03-14T22:40:58.260 に答える
64

リモートを追加し、ブランチをフェッチし、コミットをチェリーピックする手順は次のとおりです

# Cloning our fork
$ git clone git@github.com:ifad/rest-client.git

# Adding (as "endel") the repo from we want to cherry-pick
$ git remote add endel git://github.com/endel/rest-client.git

# Fetch their branches
$ git fetch endel

# List their commits
$ git log endel/master

# Cherry-pick the commit we need
$ git cherry-pick 97fedac

ソース: https://coderwall.com/p/sgpksw

于 2014-09-16T20:16:37.783 に答える
18

Git でパッチを作成して適用する方法 を参照してください。(あなたの質問の文言から、この他のリポジトリはまったく異なるコードベース用であると想定しました。同じコードベースのリポジトリである場合は、@CharlesB の提案に従ってリモートとして追加する必要があります。別のリポジトリであってもコードベース、リモートとして追加できると思いますが、ブランチ全体をリポジトリに入れたくないかもしれません...)

于 2011-02-25T16:51:08.343 に答える
13

次のように1行で実行できます。選択した変更が必要な git リポジトリにいて、正しいブランチにチェックアウトしていることを願っています。

git fetch ssh://git@stash.mycompany.com:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533
# 

git fetch [ブランチ URL] [cherry-pick するブランチ] && git cherry-pick [コミット ID]

于 2015-09-17T09:47:50.190 に答える
5

はい。リポジトリを取得し、リモート ブランチからチェリー ピックします。

于 2011-02-25T16:51:07.417 に答える
0

私の状況は、チームがプッシュする裸のレポと、そのすぐ隣にあるそのクローンがあるというものでした。Makefile のこの一連の行は、私にとっては正しく機能します。

git reset --hard
git remote update --prune
git pull --rebase --all
git cherry-pick -n remotes/origin/$(BRANCH)

ベア リポジトリのマスターを最新の状態に保つことで、ベア リポジトリに公開された提案された変更を選択することができます。また、統合されたレビューとテストのために複数のブランチを選択する (より複雑な) 方法もあります。

「何も知らない」が「リモートとして使用できない」ことを意味する場合、これは役に立ちませんが、この SO の質問は、このワークフローを考え出すためにグーグルで調べていたときに出てきたので、貢献したいと思いました.

于 2013-05-31T19:04:58.427 に答える