1

最近、プロジェクトに新しい実験機能を実装し始めました。残念ながら、開始する前にブランチするのを忘れて、共有リポジトリサーバーのマスターブランチにいくつかのコミットをプッシュしました。他の人がすでに私のコミットをチェックアウトしている可能性があるので、サーバーの履歴を上書きしないようにしたいと思います。

私の変更により、マスターは現在不安定ですが、これも良くありません。したがって、マスターに加えられた変更を元に戻し、これらの変更を含む別のブランチを作成し、十分に安定した後でもマスターに再導入(マージ)できるようにしたいと思います。

4

2 に答える 2

2

この回答では、コマンドラインツールを使用して、ブランチを管理するための別のアプローチを採用しています。さまざまなフレーバーの複数のリセットを使用するよりも混乱が少ない場合があります。

Git 1.7.2以降のrevertコマンドでは、1つのコマンドで複数のコミットを元に戻すことができます。

git revert last-stable..

last-stableこれにより、現在のHEADコミットまで(逆の順序で)、コミットごとに復帰コミットが作成されます。多くの不要なコミットを処理している場合は、1回のコミットでそれらすべてを元に戻すことができます。

git revert -n last-stable..
git commit # edit the message to explain that you are reverting multiple commits

これを他のコマンドと組み合わせて、元に戻すコミットの上に実験的なブランチを再確立する方法は次のとおりです:(
共有ブランチの名前がmaster

# Make sure we have the latest shared master
git checkout master
git pull

# Mark the last experimental commit
git branch experimental

# Revert the experimental commits
git revert last-stable.. # optionally use -n and manually commit batched reverts

# Replay the experimental commits on top of the reverted commits
git checkout -B experimental master
git cherry-pick last-stable..experimental@{1}
于 2011-02-24T06:45:23.647 に答える
1

私は質問を書いている間に問題の解決策を見つけました。私はそれが将来誰かに役立つかもしれないことを期待して解決策を説明します。すべての変更について、私はgitkとgit-guiを使用していました。コマンドラインを使用するよりもはるかに簡単で、何が起こっているのかを視覚的に理解できるので、同じことを行うことをお勧めします。これが私が取ったステップです:

  1. 最後の安定したコミットへのハードリセットを実行します。これにより、インデックスと作業ディレクトリからすべての不安定な変更が削除されます。
  2. 共有サーバーの最後のコミットで混合リセットを実行します。これにより、インデックスが共有サーバー上の現在のコミットにリセットされますが、作業ディレクトリは安定した状態に保たれます。
  3. 作業ディレクトリのすべての変更をコミットします。次に、マスターのすべての不安定な変更をキャンセルするコミットがあります。
  4. このコミットで実験的なブランチを作成し、チェックしてください。この時点で、実験ブランチには実験コードがないので、これを修正しましょう。
  5. Cherryは、実験ブランチに入る必要のあるすべてのコミットを選択します。このようにして、これらの変更を実験ブランチに再導入します。先ほど行った最後のコミットを選択しないように注意してください。gitkを使用している場合は、ブランチにすでに存在していたコミットをチェリーピックしようとしているという警告が表示されます。これらの警告を無視して続行してください。
  6. ビオラ。これで完了です。

安全のために、すべての変更をローカルで行い、完了したときにのみプッシュして、すべてが正しいことを確認することをお勧めします。その後、エラーが発生した場合は、いつでもリポジトリを削除して、共有サーバーから再度クローンを作成できます。

于 2011-02-23T22:45:52.410 に答える