32

私は通常、次の git コマンドを使用して、さまざまな gerrit をチェリーピックします。間にあるいくつかの gerrit を除外する方法はありません。欲しいです..

git cherrypick fromgerritSHA1..togerritSHA1
4

3 に答える 3

57

複数の範囲を指定できます。

git cherry-pick A..B C..D E..F

または特定のコミット:

git cherry-pick A B C D E F

除外したいコミットがたくさんある場合は、次のようなことを行う方が簡単かもしれません (貧乏人のgit rebase -iforのようなものですgit cherry-pick):

git log --pretty=oneline A..F | tac > tempfile.txt
< edit tempfile.txt to remove the commits you don't want >
git cherry-pick $(awk '{print $1}' tempfile.txt)

編集:tacログに推奨事項を追加しました。これは、生成git cherry-pickされたものとは逆の順序でコミットを確認したいためですgit log(使用することもできますgit log --reverse ...)。

于 2013-03-28T17:58:49.117 に答える
3

個々のコミットを範囲外に引き出すことができるかどうかはわかりませんabcdef..123456。Git 範囲の構文はgitrevisionsのドキュメントで説明されていますが、そのようには機能していないようです。それでも、範囲ハッシュと除外するハッシュのみを使用して、必要なものを取得する別の方法があります。

fromgerritSHA1..togerritSHA1望ましくない範囲内の 2 つのハッシュが と であると仮定して、skiphash1次のことをskiphash2試してください。

$ git rev-list --reverse fromgerritSHA1..togerritSHA1 | grep -vE 'skiphash1|skiphash2' | git cherry-pick --stdin

git rev-list --reverse fromgerritSHA1..togerritSHA1range のコミット ハッシュをfromgerritSHA1..togerritSHA1一度に 1 行ずつ出力します。--reverseチェリーピックの正しい順序でハッシュをリストするために必要です。

grep -vE 'skiphash1|skiphash2'リストから不要な 2 つのハッシュを削除します。スキップするハッシュを追加できます。それらを で区切るだけ|です。

最後に、必要なコミット ハッシュのみのリストが に渡されgit cherry-pick --stdinます。

于 2013-03-28T18:11:40.607 に答える
1

以下のようにチェリーピック中に問題が発生した場合は、最初の試行よりも1 つ前にハッシュを開始することを選択してみてください。

git cherry-pick a005efa..1ece685
[temp_4454kjerer3233 3520dd4] 3. xxx.
 1 file changed, 9 insertions(+)
[temp_4454kjerer3233 791cec5] 4. xxx.
 3 files changed, 19 insertions(+)
[temp_4454kjerer3233 2e95364] 5. xxx.
 2 files changed, 21 insertions(+)
[temp_4454kjerer3233 59e38b9] 6. xxx.
 3 files changed, 61 insertions(+)
error: could not apply a3b0c6b... 7. xxx.
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
于 2014-02-09T12:27:40.697 に答える