1

新しいプロジェクトでは、git を初めて使用するチームで、masterに直接コミットすることから始めました。誤って master でいくつかの不適切なコミットを行い、それが中央リポジトリにプッシュされ、チーム全体によってプルダウンされました。

私たちの間違いに気づき、悪いコミットの前にコミットから機能ブランチを作成しました。私たちのチームは現在、機能ブランチに喜んで取り組んでいます。

悪いコミットを再導入することなく、マスターブランチに機能ブランチからの正確なコードを含めたいと考えています。

このmerge theirsオプションは、新しいバージョンの git から削除されているようです。それでは、悪いコミットを破棄して、マスターを機能ブランチとまったく同じように見せる最善の方法は何でしょうか?

  • マージ?
  • リセットしますか?
  • リベース?
4

2 に答える 2

6

HEAD (前の) に戻りたい場合は、次のようにします。

git reset --hard HEAD@{1}

注:作業ディレクトリの変更は失われます。

これも確認できます [git コマンド]: http://git-scm.com/book/en/Git-Basics-Undoing-Things

悪いコミットのない安定したバージョンに戻ったら、フィーチャー ブランチをメイン ブランチにマージできます。

git checkout master_branch

上記のコマンドでマスターに切り替えます

git pull origin master

master ブランチをプルするには

git merge feature_branch

これにより、機能ブランチの変更でマスターが更新されます。これで、両方のブランチが同じになります。

于 2013-07-16T11:27:58.237 に答える
2

必要なものを取得するには (少なくとも) 2 つの方法があり、異なる履歴になる可能性があります。どちらを選択するかは、git データ構造と配管にどれだけ慣れているかによって異なります。

最初に、2 つの親 (現在のマスターとフィーチャー ブランチの先端) を使用してマージ コミットを行います。このコミットの内容は、親ブランチの先端にある内容とまったく同じです。これを取得する最も簡単な方法は、マージ ( git merge --no-commit) を実行し、結果をコミットする前に、インデックスの内容をフィーチャー ブランチの内容 (git reset FEATURE_BRANCHだと思います) に置き換えることです。

2 つ目は、フィーチャー ブランチで手動でマージする前に、危険なコミットをすべて元に戻すコミットをマスターに追加します。 git revertまたは、 を使用git checkout LAST_GOOD_COMMITしてコードを最後の適切なコミット時の状態に戻し、それを master の先端としてコミットすることができます。最後に、通常どおりマージ (またはリベース) します。

ツリーの現在の構造と必要な構造を引き出してから、一方から他方に移動するために必要な git 操作を解決することが役立つことがよくあります。コピーで作業することを忘れないでください。reflog には、いずれにしてもすべての履歴が保存されます :)。

于 2013-07-16T11:54:32.000 に答える