2011-09-14 30 views
0

このquestionは、マスターブランチからのコミットの巻き戻しを処理する継ぎ目です。レポのブランチで同様のgit reset --softコマンドを使用することはできますか?またはgit revertの意味を理解しようとしていますか?裸のレポのブランチから最後のコミットをコミットしないにはどうしたらいいですか?

最終的に私は裸のレポで2つまたは3つのコミット(最後のものではない)で2つのブランチを巻き戻したいと思います。

+0

あなたは裸のレポに足を引っ張っていることを意味しますか?その枝が巻き戻されるように(遠隔の)裸のレポを望みますか? –

+0

@Pal Notz:はい。その私のレポので、私は他のユーザーの暴力を心配していない。 – Jamie

答えて

6

私はまだレポがどこにあるか明確ではありません。あなたはそれが裸だと言いますが、あなたはあまりにも裸でなければなりません。

ローカルブランチを巻き戻したい場合は、git resetを使用します。あなたはローカルブランチbetaを持っているのであれば、あなたはこのようにそれを巻き戻すことができます:HEADHEAD~1HEAD~2

$ git checkout beta 
$ git reset --hard HEAD~2 

これは3つのコミットをドロップします。これらは約90日でごみを回収するので、必要ならば戻してください。

あなたはoriginという名前のリモートレポを持っている(つまり、裸である)、あなたは、あなたが強制プッシュ経由でこれを行うことができ、そこの上に枝を巻き戻したい場合。準備が整う前に、3つのコミットをbetaにプッシュしたとしましょう。あなたは、あなたの地元のプロジェクトでそれらを保つが、このようなリモート裸のレポからそれらを削除することができます。

$ git push -f origin beta~3:beta 

これは、そのリポジトリを使用して他の人に厳しいことができますが、あなたは大丈夫ているように聞こえます。あなただけが裸のレポをお持ちの場合は

はあなたが強制的にそうように枝をリセットすることができます。

$ git branch -f beta beta~3 

注:これは、ローカルのブランチを巻き戻しの最初のケースのために働きます。繰り返しますが、これはこのレポを使用している誰にも不愉快です。

5

あなたのやりたいことによって異なります。 git revertを新たに生成しますあなたのリポジトリにコミットして、選択したコミットによる変更を元に戻します。これは、変更追跡の観点からはうれしいことです。元に戻ったものとその理由を見ることができ、後でいつでも決定を再考することができます。

git reset--softは作業コピーでのみ意味があります)を実行すると、単にリポジトリを元の状態に戻すことができます。これにより、選択したコミット後にコミットが破棄されるため、その履歴は永遠に失われます。リポジトリのリモート作業コピーを持つ人がいると、作業コピーが突然見つからなくなり(git pushを実行したときに誤って変更が再導入される可能性があります)。

自分のリポジトリで他の人と共有していない場合は、git resetは問題ありません。さもなければ、git revertはおそらく、リポジトリの履歴にトレースを残し、リモートの作業コピーとうまくやり取りするため、より良い選択です。

+0

間違いなく 'git reset'となります。 'git-reset 'は、 'SHA-HASH'が参照されていない場合、そのブランチ上のすべてのコミットを残しますか? (すなわち、削除?) – Jamie

関連する問題