2016-07-04 5 views
3

私は2つの分岐、他のブランチからステージングエリアに変更を加えることはできますか?

  • マスター
  • 新機能

新機能は、私がマスターに追加したいが、私は私がマージしたいどのくらいのコントロールをしたいコミットしているしています。

各行の変更を追加/却下するオプションを希望します。同様に私はできますgit add -p

多分私は間違った用語を検索していた。これはかなり明白な作業のようです。

+1

を作業ディレクトリーにあり、ブランチごとに1つではありません。 – choroba

+0

@choroba:実際には、*標準*ステージングエリア(別名「the」インデックス)は1つしかありませんが、環境変数 'GIT_INDEX_FILE'を使用して独自の一時インデックスを定義できます。これは、この特定の作業のために行うことは有益なことではありません。:-)しかし、残念ながら、 'git commit -a'のいくつかの奇妙なコーナーを説明するために知っておく必要があり、' --only'または '--include'でコミットします。 – torek

+0

@torek 1つのローカルリポジトリを持つ複数の作業ディレクトリを持つことができます。それぞれのリポジトリには独自のインデックスがあります。あなたは両方とも正しいのです:P – poke

答えて

3

使用git cherry-pick、その後、対話的にコミットするかを選択します。

のgit

をチェリーピック...

-nを、--no-commit

通常git cherry-pick自動的にシーケンスを作成するo fはコミットする。この フラグはチェリーピックアップに必要な変更をコミットせずに 作業ツリーとインデックスにそれぞれ適用します。さらに、 このオプションを使用すると、インデックスがHEADコミットと一致する必要はありません。 cherry-pickはインデックスの開始状態に対して行われます。

これは、インデックス に複数のコミットの効果をチェリーピッキングするときに便利です。

ので、コマンドのシーケンスは、次のようになります。

git cherry-pick -n <commitid> # merge commitid into the index and working-tree 
git reset      # clear the index 
git add -p      # selectively add merged changes to the index 

また、あなたがステージング領域から望ましくないハンク削除git reset -pを使用することができます唯一のステージングがあります

git cherry-pick -n <commitid> # merge commitid into the index and working-tree 
git reset -p # interactively remove from the index changes brought by commitid 
+0

ありがとう、それは働いた。前に 'cherry-pick'で試してみましたが、' -n'フラグを使っていませんでした。あなたの助けに感謝! – Sisir

2

私はあなたがパッチファイルを使用しようとすることができると思います。
は、パッチファイルの実行を作成するには、次のファイルで

git checkout master 
git diff ..new-features > patch.diff 

patch.diffあなたは枝のマスターと新機能の違いがあります。
今、あなたは実行し、パッチファイルを適用することができます。

git apply patch.diff 

今、あなたは、任意の方法であなたの変更を管理することができます。 -n|--no-commitオプション付き

+0

@Leonはい、私はパッチを意味しました。あなたよ!私はすでにこのタイプミスを修正しました。 –

関連する問題