4

以前にコミットした変更を間違えたことに気付きました。この (間違った) コミットに依存する他のコミットがいくつかあります。

それを変更して、それらの変更を作業コピーに反映させることはできますか?

4

4 に答える 4

6

それはできますが、私はむしろそれをしたくありません。過去を変えることには副作用があります。ブランチまたはコミット ツリーは早送りされず、サーバー上のブランチがあればそれをオーバーライドする必要があります。言い換えれば、あなたがそれを最後に見た人であり、それがあなたのコンピューター上にある場合を除きます. さらに問題が発生する可能性があり、何か問題が発生した場合に物を失うリスクがあります。

タイムトラベルと代替現実の世界に入る準備ができているなら!

へようこそgit rebase

最初に、リベースする新しいブランチを作成します。これにより、何か問題が発生した場合に変更したいブランチのコピーが作成され、リベースを削除するだけで何も変更されません。コミットハッシュに注意するだけです。

開始する最も簡単な方法はgit rebase -i HEAD~N、N が過去に変更したいコミットの数です。

エディターを開く必要があります。各行の最初の単語を edit のようなものに変更できます。次に、ファイルを保存すると、リベースされます!

リベースするときは、ファイルの変更、追加、ファイルの削除など、何でもできます。コミットすると、競合がなければ自動的に続行されます。そして、すべてが完了すると、コミットが削除され、編集され、名前が変更され、または必要に応じてリベースされたブランチが作成されます。それからすべてが正しければ。古いブランチを削除します (リベースされていません)。新しいリベースされたブランチをプッシュすると出来上がりです。

編集

エディターを開くときは、非常に明確でない限り。行を削除すると、選択したコミットが削除されます。ファイル内のすべてを削除しても、何も起こりません。リベース中はいつでも中止でき、git プロジェクトの状態は変化しません。リベースは、実際には何も変更しないため、安全に行うことができます。古いコミットへの参照を保持している場合、それらは消えません。リベース後、代替パスを作成します。1 つの古いパスと新しいパスがあります。古いパスは逆参照される可能性があり、この古いパスを参照するものはすべて新しいパスに移動する必要があります。

重要

ところで、私が代わりに行うことの 1 つは、古いコミットを修正する何かをコミットすることです。リベースは必要な場合にのみ使用する必要があると思います。たとえば、同僚が誤って 4 GB のデータベース バックアップをコミットしたとします。

于 2013-06-23T11:20:31.560 に答える
2

変更を加えて としてコミットすることから始めますfixup! Original's commit message

次に、レポで何を表示するか (および何が許可されるか) を決定します。履歴の書き換えが許可されていない場合は、完全に停止してください。可能なことは何もありません。

許可されている場合は、元のコミットの親でインタラクティブなリベースを開始します。最初の 2 つのエントリ (pick original と fixup with fix) が表示されます。他のすべてのコミットを「編集」に設定し、起動します。

プロセスは、さらにコミットするたびに停止し、そこでコンパイルし、コンテンツを書き直して変更を認識し、正常に動作します。と使用しますrebase --continue。次に、ブランチを強制的にプッシュします (そして、歴史を書き換える場合に規定されたすべての儀式を行います)。

于 2013-06-23T16:09:36.520 に答える
1

コミットがすでにプッシュされている場合は、元に戻すことができます

git revert <commit hash>

コミット ハッシュを取得するには、次のgit logコマンドを使用します。

于 2013-06-23T11:14:46.663 に答える