2017-09-18 11 views
1

場合によってはgit resetを使用します。通常は、1つまたは複数のコミットを '元に戻す'ことです。たとえば、2時間前に私のコミット状態に戻る場合は、私はgit reset HEAD~2です。ステージングエリア/インデックス内のすべての変更をHEAD~2からHEADに変更しないでください。ブランチにリセットできませんか?

現在、私はコミットのかなりの量を持っています、私はbranchAの分岐から追加した〜15です。今度はbranchBで、branchAからbranchBまでのすべての変更をステージングエリアに残して、branchAにリセットし直してください。私は基本的に、これらの変更を新たに追加してコミットしたいと思っています。

git resetは、コミットを引数として受け取ります(つまり、git reset HEAD)。だから私がgit reset HEAD^を実行すると、1つ前にコミットした後に行ったすべての変更が、ステージング領域で変更/変更されて表示されます。だからなぜ、git reset branchA私の支店〜15コミットを設定しないでしょうか?この場合、ブランチはコミットの代用として使用できませんか?

答えて

2

私はあなたがソフトリセットを探していると思う:<SHA-1>はHEADのハッシュです

git reset --soft branchA  # or 
git reset --soft <SHA-1> 

branchAのコミット。

このソフトリセットは、branchBのHEADポインタを同じブランチ内のbranchAのHEADコミットに戻します。ただし、ステージまたは作業ディレクトリbranchBには触れません。言い換えれば、branchAbranchBの間のdiffの変更がステージに入り、あなたが望むようにそれらを再度コミットすることができます。

これは一連のコミットをスカッシュする1つの方法であることに注意してください。あなたが望むものを達成するもう一つの方法は、インタラクティブなリベースですが、もう少し作業が必要です。

更新:

エラーfatal: ambiguous argument 'branchA': both revision and filenameはあなたがbranchAという名前のブランチ、branchAという名前もフォルダやファイルに加えて、持っていることを意味しています。

git reset --soft branchA -- 
+0

はい、私はやっていることがrebaseのようなものであることを漠然と認識しています。ファイル/フォルダではなくブランチを使用するようGitに指示してください。私のケースでは、現在のコミットセットが "SAVE"や "SAVE_STUFF"のような名前を持つものはほとんどないので、必要に応じてコミットしたいと思います。あなたの応答から得られる主なものは、 'branchA'を使うことはできませんが、最初に' 'ハッシュを取り出し、それを' reset'の引数として使用する必要があります。 –

+0

@AlexBollbachいいですね、ブランチ名にリセットすることも有効です。 –

+0

それはありません、私は得る '致命的:曖昧な引数 'branchA':リビジョンとファイル名の両方' –

関連する問題