12

これがブランチを操作する適切な方法であるかどうかはわかりません。

  • このアプリケーションは構造 A にありました。
  • その構造Aにいる間にブランチZを作成しました(ただし、マスターブランチで自分自身を機能させ続けました)。
  • (master ブランチで) 作業しているときに、その構造を変更したため、すべてがめちゃくちゃになってしまいました。:)
  • これらの新しいファイルを担当者にコミットしたり、追加したりしたことはありません。

リクエスト:

  • 最後のコミットに存在する構造に戻す必要があります。コミットされていないすべての変更を元に戻し、追加された可能性のある新しいファイルとフォルダーも削除します。

これはどのように行うことができますか?

4

3 に答える 3

15

git checkout Aめちゃくちゃになった別のブランチを作成した場合は、前にあったものに戻すだけですA:master

git branch -d <branchname>マージされてい-fないコミットがある場合は、必要に応じて後で悪いブランチを削除することもできます。

編集:リポジトリに削除したい多くの悪い変更が含まれている場合は、git reset --hard HEADそれらを元に戻すために使用できます。新しいファイル (git によって追跡されていない) がある場合git clean -fdは、それらをすべて削除します。明らかに、git で復元できないため、慎重に使用してください。

于 2011-04-27T14:40:11.290 に答える
5

ブランチ Z で A の「スナップショット」を構造化するためにリバースする必要があります

$ git checkout A
$ git branch -d Z
$ git branch Z
$ git reset --hard HEAD~3
$ git checkout Z

英語で:

「Z」ブランチを削除し、「A」の現在の状態から再作成します。

A ブランチを 3 つのコミットにリセットします。これは例です。3 はおそらく、リセットする履歴の深さとして適切ではありません。その数を正しい数に変更します (そしてgit log、ブランチが分岐したコミットの数を把握するために使用します)。

Z ブランチに切り替えて、以前は "A" にあった変更が "Z" にあることを確認します。

于 2011-04-27T17:55:30.230 に答える
3

次のものだけでブランチを作成したと思われます。

git branch Z

実際にそれを作成し、それに切り替えたいと思ったとき。次のように、git checkout に -b フラグを使用してブランチを作成し、それに切り替えることができます。

git checkout -b Z

ここで行う必要があるのは、マスター ブランチにコミットした変更を元に戻すことです。これにより、コミットが取り消され、コミット前と同じようにインデックスが表示されます。

git checkout master
git reset --soft HEAD^

次に、Z に切り替えて、インデックスからの変更をコミットします (既にステージングされています)。

git checkout Z
git commit -m "blah blah"

お役に立てれば。

単純なバグ修正でない限り、マスターで直接作業することは避けてください。


私が理解しなければならない重要な概念が含まれているため、回答を保管しておいてください。それはうまくいきませんでした。必要なのは、ブランチ Z を取得してマスターとして配置することです - これは可能ですか?

もちろん。これは、さまざまな方法で行うことができます。コミットが 1 つしかない場合は、Z ブランチをマスターにマージして、そのコミットをマスターに取得できます。しかし、私はあなたが Z ブランチでのコミットをまったく望んでいないと仮定しています。次に、同じことを行うことができますが、ブランチを切り替えます。

git checkout Z
git reset --soft HEAD^
git checkout master
git commit -m "blah blah"
于 2011-04-27T15:31:04.927 に答える