2013-03-28 13 views
20

私は通常、以下のgitコマンドを使用して、さまざまなgerritsの範囲を選択します。どのようにしていくつかのgerritsを除外しますか。そこに我々はgerritsの範囲を選択し、私たちが望むものを除外することができます1。..git cherry pick - コミットの範囲といくつかを除外する

git cherrypick fromgerritSHA1..togerritSHA1 
+0

同様:[桜コミットの範囲を選択し、別のブランチにマージする方法?]何らかの理由(http://stackoverflow.com/q/1994463/55075) – kenorb

答えて

33

あなたが複数の範囲を指定することができます。

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

、あるいは特定のコミット:

git cherry-pick A B C D E F 

あなたは除外したいコミットをたくさん持っている場合、このような何かする方が簡単かもしれない(ソートのように貧乏人のgit rebase -igit 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 ...を使用することもできます)、ログインしてください。

+0

を私は一時ファイルに入るライン.txtを逆にする必要があります。 gitログは最新のものから古いものへのすべてのコミットを表示しますが、git cherryを使用してこれらのコミットを古いものから最新のものに適用したいとします。あなたはそれを見逃しましたか、それはあなたの場合の問題ではありませんでしたか? –

+1

@KonradSzałwińskiあなたは正しいです...そのビットを忘れました。 Linuxには 'tac'という便利なユーティリティがあり、行の順序を逆転させることができます。私はその行を編集します。 – twalberg

+0

解決策をダウンロードしてくれてありがとう。残念なことにWindowsでは 'tac'コマンドがないので、その時点でオンラインツールを使用して回線を逆転させる必要がありました。 git log --reverseで指摘してくれてありがとう。 –

2

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

したくない範囲fromgerritSHA1..togerritSHA1で2つのハッシュがskiphash1skiphash2あると仮定すると、試してみてください。

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

git rev-list --reverse fromgerritSHA1..togerritSHA1プリントアウト時に範囲fromgerritSHA1..togerritSHA1、1行にハッシュをコミットします。チェリーピックの正しい順序でハッシュをリストするには、--reverseが必要です。

grep -vE 'skiphash1|skiphash2'は、リストから削除したい2つのハッシュを削除します。より多くのハッシュを追加してスキップすることができます。|でハッシュを区切ります。

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

+0

この方法は、よりスクリプト可能な音.. – Gqqnbig

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' 
関連する問題