私は通常、次の git コマンドを使用して、さまざまな gerrit をチェリーピックします。間にあるいくつかの gerrit を除外する方法はありません。欲しいです..
git cherrypick fromgerritSHA1..togerritSHA1
私は通常、次の git コマンドを使用して、さまざまな gerrit をチェリーピックします。間にあるいくつかの gerrit を除外する方法はありません。欲しいです..
git cherrypick fromgerritSHA1..togerritSHA1
複数の範囲を指定できます。
git cherry-pick A..B C..D E..F
または特定のコミット:
git cherry-pick A B C D E F
除外したいコミットがたくさんある場合は、次のようなことを行う方が簡単かもしれません (貧乏人のgit rebase -i
forのようなものです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 ...
)。
個々のコミットを範囲外に引き出すことができるかどうかはわかりません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..togerritSHA1
range のコミット ハッシュをfromgerritSHA1..togerritSHA1
一度に 1 行ずつ出力します。--reverse
チェリーピックの正しい順序でハッシュをリストするために必要です。
grep -vE 'skiphash1|skiphash2'
リストから不要な 2 つのハッシュを削除します。スキップするハッシュを追加できます。それらを で区切るだけ|
です。
最後に、必要なコミット ハッシュのみのリストが に渡されgit cherry-pick --stdin
ます。
以下のようにチェリーピック中に問題が発生した場合は、最初の試行よりも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'