0

1 つのコマンドでリベースとブランチの移動の両方を行う方法はありますか? $DESTINATION をチェックアウトしている間に、次を実行しようとしています。

git rebase --no-ff --interactive --onto "$DESTINATION" "$IMPORT_BEGIN" "$IMPORT_END"

しかし、それが完了すると、頭が切り離された状態になります。その範囲をチェリーピッキングするのと同様の結果を得る方法はありますか?それは、最後にリベースされたコミットを指す $DESTINATION を完了したときですか?

4

1 に答える 1

0

これはあなたが求めていることをするはずです:

git checkout $DESTINATION        # assuming here that that's a branch name, not a hash
git cherry-pick $IMPORT_BEGIN..$IMPORT_END

$IMPORT_BEGINチェリーピックしたい最初のコミットに名前を付ける場合は、${IMPORT_BEGIN}~1代わりに使用する必要があることに注意してください-他の多くのgitコマンドと同様にcherry-pick、範囲を解釈して、「<begin>..<end>以降のすべてのコミット」を意味します。<begin><end>

事前にブランチをチェックアウトすると (ハッシュによるチェックアウトではなく、切り離されたヘッドになります)、cherry-pick自動的にブランチ ヘッドが進みます。

編集:これrebaseを行うために使用するために、複製したいコミットがという名前のブランチにあると仮定しましょうdevel(つまり、$IMPORT_END=develハッシュではありません-ブランチの代わりにハッシュを使用すると、ヘッドが切り離されてしまいます)、そしてこれらのコミットを に移動しますmaster。その場合、これを行うことができます:

git checkout devel
git rebase --onto master $IMPORT_BEGIN..$IMPORT_END

それはコミットをコピーしますが、masterブランチを の新しいバージョンに進めません$IMPORT_END。これは、希望する最終状態のようです。それを達成するには、上記に従って次のことを行う必要があります。

git checkout master
git merge --ff-only devel

develrebase新しいコミットを指すようにによって更新され、は同じ場所mergeを指すようになります。master

于 2013-07-01T21:02:31.160 に答える