方法: 1. "git commit --amend" コマンドを使用して 1 つの履歴レコードを変更します。 2. "git rebase -i specific submitnumber" コマンドを使用して複数の履歴レコードを変更します。 3. " git filter-「branch --filer command」コマンドで変更された範囲は履歴を書き換えます。
この記事の動作環境: Windows 10 システム、Git バージョン 2.30.0、Dell G3 コンピューター。
git の履歴を変更する方法
ジュニア プレイヤー git amend
次の場合後で、自分に障害があることがわかったので、 git commit --amend を使用して前のコミットを変更しました。このコマンドが実行されると、現在のブランチから以前のコミットが削除され、ワークスペースが送信の準備が最後に行われた状態に復元され (最後のコミット後の変更を混合しながら)、vim インターフェイスが表示されます。そして最後のコミット情報を変更します。 vim で保存すると、現在のすべての変更が新しい送信情報とともに送信されます。
このコマンドは最後のコミットのみを変更できます。1 つのコマンドは、次の一連のアクションを実行するのと同等です:
$ORIG_HEAD=`git show`#保存当前的这次提交的 commit 号 $git reset --soft HEAD^#回到最后一次提交准备提交前的状态 $...#做一些操作和修改 $git commit -c $ORIG_HEAD#表示用最后一次提交的提交信息来做为提交信息,不过会调出编辑器界面
中級プレイヤー git rebase
前へ git commit --amend は最後のコミットのみを変更できますが、気まぐれでずっとハンディキャップを負っているときは、このコマンドでは救われません。現時点では、git rebase -i というキラー ツールを使用する必要があります。 help 振り返るには耐えられない過去の出来事を見直します。
実際には、 git rebase -i は履歴レコードを変更するために特別に使用されるコマンドではなく、リベース操作を対話的に (つまり 1 つずつ) 実行できるようにするコマンドですが、このコマンドを使用できます。コミット履歴を変更するために使用されます。
このコマンドの使用方法は、 git rebase -i です。たとえば、 git rebase -i HEAD~3 を使用して、この提出、最後の提出、および前の提出を変更できます。合計3回提出します。
図に示すように、変更を 3 回送信して git rebase -i HEAD~3 と入力すると、次のインターフェイスが表示されます。
これは vim エディター インターフェイスです。このスクリプトを編集してみましょう。使用できるコマンドは、以下のコメント内の 6 つのコマンドです。現在編集中のページを終了すると、git はこのスクリプトに従って (最も古い送信から開始して) 送信に対して 1 つずつ対応する操作を実行します。
投稿情報を修正したいだけの場合は、すべての pick を r に変更して、wq で保存すると、git で古い投稿情報から順に 1 つずつ変更できます。
残りのコマンドのうち、e は、対応する送信を変更するときに vim エディターから飛び出します。このとき、HEAD ポインターはこの送信を指します。このとき、 git commit --amend を使用して、この送信にさまざまな変更を加え、 git rebase -- continue を実行して次の操作を続行します。 s は、対応する送信を変更するときに、この送信とその親の送信を 1 つの送信にマージします。 f は s に似ていますが、現在の送信を無視します。情報。親によって送信された情報を直接使用します。x では、x の後にコマンドを入力し、HEAD がこの送信を指すときにコマンドを実行する必要があります。これらのコマンドを使用して、送信を並べ替えたり、送信を分割したりすることもできます。
究極のキラー git filter-branchN 回送信した後、送信したメール アドレスがすべて間違っていたことに突然気づいたとします (╯°□° )╯︵ ┻━┻、この時点で前述のコマンドを使用すると、変更が完了する前に力尽きてしまう可能性がありますが、この時点で git filter-branch を使用してブランチを書き換えることができ、各ブランチをバッチ処理できます。
git filter-branch コマンドで使用される基本的な使用形式は git filter-branch -- 'コマンド' であり、フィルターが異なれば提供される内容も異なります。たとえば、 --msg-filter は送信情報を変更することを意味し、元の送信情報は標準入力から読み取られ、新しい送信情報は標準出力に出力されます。 --tree-filter は、送信情報を変更することを意味します。ファイル リストの変更など 最後に、書き換えのスコープが存在します。たとえば、 git filter-branch --env-filter 'GIT_AUTHOR_EMAIL=john@example.com export GIT_AUTHOR_EMAIL' HEAD を使用してメールボックスを書き換えることができますコマンドを呼び出す前にこれを出力することをお勧めします ブランチを 1 つ試してから、変更したいブランチで操作を実行します。
推奨学習: "
Git チュートリアル以上がgitの履歴を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。