0

時間がない場合は、次のまったく技術に関係のない 3 段落を飛ばしてください。

コミットを元に戻す方法を理解するためだけに、Web 上のテキスト ストリームと何時間も格闘してきましたが、コミットは後で不要、望ましくない、または間違っていることがわかりました。git の入門および高度なチュートリアル/マニュアルはたくさんありますが、そのほとんどは、あなたの側で物事が複雑になったときに実用的なガイドラインを提供できません。結局のところ、私たちはそれらの答えを実装しようとする初心者であり、ほとんどが何十回も失敗し、人生に不満を感じるからです =/

これらの問題が私たちの素敵で貴重なプロジェクトに関するものである場合、それはますます恐ろしくストレスの多いものになり、git は非常に複雑な生き物であり、ほとんどの場合協力しようとしないため、物事がより困難になります (!)。

長いイントロで申し訳ありませんが、大多数の人には当てはまらないかもしれませんが、私と同様の人にとって、マニュアルとヘルプとガイドは時々無力であり、あなたは運、洞察力、持久力で独力です. そういうわけで、今日は質問をするつもりはありませんが、私の問題に対する私の素敵な解決策になった後、可能性のある質問に答えてください.


Problem: プロジェクトに変更をコミットしたが、それを元に戻したい場合、それを行う方法はたくさんありますが、これは私にとって輝いていました: git rebase. 変更をプッシュしたかどうかは関係ありません。とにかくそのコミットを元に戻すことができますが、既にプッシュしている場合は、再度プッシュして github のマスター ブランチを更新する必要があります。これについては後で説明します。 .

4

1 に答える 1

2
  • ステップ 1: 不要なコミットの順序を追跡する -->git log

  • ステップ 2: rebase を実行してコミットを操作します --> git rebase -i HEAD~n。「n = 不要なコミットの順序」となります。例: 最新のコミットを元に戻したい場合は、n を 1 に置き換えます。

  • ステップ 3: ページ上部の行を編集する必要があるエディターが表示されます。これらの行の先頭には # が付いていません。各行は順にコミットを表します (最新のコミットが一番上に表示されます)。削除するコミットを選択し、対応する行全体を削除します。次にctrl+x、キーボードの を押し'y'、最後に を押しますenter

  • ステップ 4: すべてが順調に進んだ場合、コミットは削除され、「ステップ 9」にジャンプする準備が整いました。しかし、これが当てはまらず、エラー メッセージが表示された場合は、さまざまなコミット間にリンクされた変更があり、それらの間に依存関係が作成されたことを意味します。そのため、別のコミットに依存しているため、そのようにコミットを削除することはできません。まず、この競合を解決する必要があります。

  • ステップ 5: エラーが発生rebaseしたため、git のリンボに入ることができ、ブランチでオンラインにならずにファイルのパスを変更するなどの変更を行うことができます。とにかく、この時点で、ステータスを確認してください -->git status

  • ステップ 6: ご覧のとおり、'changes to be committed'or/andがあり'unmerged paths'ます。最初に、このコマンドを使用して、それらを 1 つずつ追加する必要があります -->git add any_file_path

  • ステップ 7: コミットする時が来ました。変更により、削除したコミットに依存していた別の既存のコミットが更新されます。競合のためにエラーが表示されたことを覚えておいてください。更新をコミットすることで、エラーは解決されます。-->git commit

  • ステップ 8: これでgit log、不要なコミットが削除されたことを確認できます。先に進む時が来ました。-->git rebase --continue

  • ステップ 9: 実行git statusして、「強制的にプッシュ」する必要があるかどうかを調べます。以前に不要なコミットをプッシュしたことがある場合は、「マスター/オリジン」から分岐したことが「ステータス」に表示されます。また、'origin/master' には現在よりも多くのコミットがあることがわかります。これは、ほんの数分前に一部を削除したためです。ここで、github の master ブランチを更新します。ステータスがすべて問題ない場合 (つまり、以前に不要なコミットをプッシュしていないことを意味します)、次のステップをスキップします。

  • ステップ 10: github を更新するには、強制プッシュを実行するだけです。-->git push origin +master

  • ステップ11:おめでとう!あなたは目標を達成しました。これで、ローカル リポジトリと github の両方で不要なコミットから解放されました。同期されているため、「オリジン/マスター」からgit status分岐していないことがわかりgit log、不要なコミットの死を確認できます。「github」にログインし、そこから「commits」をクリックして確認することもできます。


それは今のところすべてです。私は間違いを犯した可能性があり、正しい編集に感謝します。

于 2012-12-29T14:35:41.873 に答える