任意のコミットで変更を元に戻す方法は?

アレックス・ボルバッハ

の前のいくつかのコミットであるいくつかのコミットがありHEADます。コミット中に、気付かなかった段階的な変更がいくつかありました。私の目を見て、git logこれらの望ましくない変化に気づきました。グーグルで検索'undo changes for an arbitrary commit'すると、コミット全体を元に戻し、インデックスの変更を削除することで多くの結果が返されます。しかし、この任意のコミットでこれらの変更を削除する方法は何ですか?

まず、作業ツリーがクリーンであることを確認してください。git statusこれを見つけるのに役立ちます。コミットされるのを待っている変更を報告するべきではありません。変更がある場合は、どちらかそれらをコミット(一時的なブランチに必要な場合)、またはでき隠しておくそれらを。

作業ツリーがクリーンであることを確認したら、現在のコミットにブランチを作成しますが、チェックアウトはしません。

$ git branch backup

これは実際には必要ありません。代わりに reflog を使用できますが、この方法の方が簡単です (より見やすくなります)。backupは、私がブランチに選んだ名前であり、特別なものではありません。唯一の制約は、それがまだ存在してはならないということです。

過去の 3 番目のコミットを変更したいと仮定して、次を実行します。

$ git rebase --interactive HEAD~4

Git は、デフォルトのエディターで、コンテンツが次のような一時ファイルを開きます。

pick 7f0c5e794 the commit you want to change
pick 9f96dcae9 commit message #2
pick 02ed04062 commit message #3
pick beac35780 the most recent commit

これがリベースの予定です。もちろん、過去 3 回のコミットのハッシュとサブジェクトが含まれています。それらは、HEAD~4時系列順 (古い順) で( のため)最後の 4 つのコミットです。

変更したいコミットの行 (最初の行) を編集します。変更pickeditてファイルを保存し、エディターを終了します。

エディターを終了すると、Git はリベースを開始します。コミットHEAD~3チェックアウトして終了editし、プランで要求されたとおりにコミットできるようにします

必要な変更を加えてステージングし、実行git commit --amendしてコミット (目標) を変更します。変更を行う最良の方法は、次を実行することです。

$ git reset --mixed HEAD~1

これにより、リポジトリは変更したいコミットの前の状態になり、作業ツリーでファイルが変更され、インデックスには何も追加されません。必要なファイルのみをインデックスに追加し、コミットします (なし --amend)。これは、あなたが望んでいた「編集済み」の1コミットです。

コミットを編集した後も、まだコミットされていない変更が作業ツリーに残っています。それらをコミットする (元の履歴に存在しなかった新しいコミットを作成する) か、それらを stash する (そしてリベースを完了した後に適用する) か、完全に破棄する (git reset --hard実行する; 本当に必要ないことを確認してください)このコマンドを実行する前にそれらを参照してください)。

コミットされていない変更の問題を何らかの方法で解決したら、次を実行します。

$ git rebase --continue

Git はリベースを続行します。計画で伝えたように、他のコミットを処理します。私たちの計画はpick他のコミットについて言及しており、これは、Git は変更したくないこれらのコミットの変更のみを適用することを意味します。

すべてがうまくいけば、このコマンドが完了すると、希望どおりの新しい履歴行が作成されます。それがあなたが望むように見えない場合は、実行できます

$ git reset --hard backup

最初の場所に戻って最初からやり直すこと。

リベースが正常に完了しない場合 (競合が発生する可能性があります)、 を実行することでいつでも中止できますgit rebase --abortGit はすべての変更を元に戻し、開始した場所 (backupブランチが指すコミット上) に戻ります

または、競合を解決しgit rebase --continue、リベースが完了するまでコミットして実行することができます

何らかの方法でリベースを終了し、結果に満足するか、過去のコミットを変更するという考えをやめたら、実行git branch -D backupしてバックアップ ブランチを削除します。


1 Git のコミットは不変です。コミットを編集することはできません。実際、コミットを「編集」すると、古いコミットの代わりに使用される新しいコミットが作成されます。もちろん、新しいコミットには元のコミットとは異なるハッシュがあります。

古いコミットはまだリポジトリに存在し、そのハッシュまたはブランチを使用してアクセスできます。アクセスに使用できるブランチがなく、reflogにそのブランチへの参照がない場合、コミット オブジェクトは次のガベージ コレクション サイクルで削除されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

変更を失うことなくコミットを元に戻す方法は?

分類Dev

2つのコミット間の変更を元に戻すにはどうすればよいですか?

分類Dev

単一のファイルで古いコミットからの変更を元に戻す方法

分類Dev

変更をコミットしてgitflowリリースを元に戻す方法

分類Dev

複数のgitコミットを元に戻す方法は?

分類Dev

ローカルのgitリポジトリにコミットされた変更を削除/元に戻す方法

分類Dev

コミットから変更を元に戻すだけ

分類Dev

Git最近のマージコミットを元に戻し、リベースに変更する方法

分類Dev

過去のコミットで行われた変更を一時的に元に戻す

分類Dev

過去のコミットで行われた変更を一時的に元に戻す

分類Dev

xcodeを元に戻す方法は、コミットされていない場合はすべての変更を破棄します

分類Dev

最後のコミットを元に戻し、Mercurialの変更を維持するにはどうすればよいですか?

分類Dev

コミットを元に戻すパッチと「元に戻すパッチ」の違いは何ですか?

分類Dev

Visual Studio 2015で、Gitでコミットを元に戻す/元に戻す方法は?

分類Dev

コミットを元に戻し、それらの変更から新しいブランチを作成するにはどうすればよいですか?

分類Dev

コミットに戻り、ファイルの変更を元に戻し、最後のコミットに戻ります

分類Dev

TortoiseGitを使用して特定のコミットを元に戻す方法は?

分類Dev

誰かのコミットを元に戻し、他の人のコミットを保持する方法は?

分類Dev

gitの最後のコミットを元に戻す方法

分類Dev

コマンド履歴の変更を元に戻す方法は?

分類Dev

最後のコミットを元に戻す方法

分類Dev

「gitresetHEAD」がコミットされていない、ステージングされていない変更を元に戻さないのはなぜですか?

分類Dev

すべてのファイルを変更した特定のコミットを元に戻すにはどうすればよいですか?元に戻すときに多くの競合が発生しますか?

分類Dev

Gitの履歴の途中でコミットを元に戻す

分類Dev

変更を元に戻すgit-log欠落マージコミット

分類Dev

gitでコミットの範囲を元に戻す

分類Dev

コミットの一部をgitで元に戻す

分類Dev

BitBucketでのマージコミットを元に戻す

分類Dev

最後から2番目のコミットを元に戻すが、最後のコミットは元に戻さない方法は?

Related 関連記事

  1. 1

    変更を失うことなくコミットを元に戻す方法は?

  2. 2

    2つのコミット間の変更を元に戻すにはどうすればよいですか?

  3. 3

    単一のファイルで古いコミットからの変更を元に戻す方法

  4. 4

    変更をコミットしてgitflowリリースを元に戻す方法

  5. 5

    複数のgitコミットを元に戻す方法は?

  6. 6

    ローカルのgitリポジトリにコミットされた変更を削除/元に戻す方法

  7. 7

    コミットから変更を元に戻すだけ

  8. 8

    Git最近のマージコミットを元に戻し、リベースに変更する方法

  9. 9

    過去のコミットで行われた変更を一時的に元に戻す

  10. 10

    過去のコミットで行われた変更を一時的に元に戻す

  11. 11

    xcodeを元に戻す方法は、コミットされていない場合はすべての変更を破棄します

  12. 12

    最後のコミットを元に戻し、Mercurialの変更を維持するにはどうすればよいですか?

  13. 13

    コミットを元に戻すパッチと「元に戻すパッチ」の違いは何ですか?

  14. 14

    Visual Studio 2015で、Gitでコミットを元に戻す/元に戻す方法は?

  15. 15

    コミットを元に戻し、それらの変更から新しいブランチを作成するにはどうすればよいですか?

  16. 16

    コミットに戻り、ファイルの変更を元に戻し、最後のコミットに戻ります

  17. 17

    TortoiseGitを使用して特定のコミットを元に戻す方法は?

  18. 18

    誰かのコミットを元に戻し、他の人のコミットを保持する方法は?

  19. 19

    gitの最後のコミットを元に戻す方法

  20. 20

    コマンド履歴の変更を元に戻す方法は?

  21. 21

    最後のコミットを元に戻す方法

  22. 22

    「gitresetHEAD」がコミットされていない、ステージングされていない変更を元に戻さないのはなぜですか?

  23. 23

    すべてのファイルを変更した特定のコミットを元に戻すにはどうすればよいですか?元に戻すときに多くの競合が発生しますか?

  24. 24

    Gitの履歴の途中でコミットを元に戻す

  25. 25

    変更を元に戻すgit-log欠落マージコミット

  26. 26

    gitでコミットの範囲を元に戻す

  27. 27

    コミットの一部をgitで元に戻す

  28. 28

    BitBucketでのマージコミットを元に戻す

  29. 29

    最後から2番目のコミットを元に戻すが、最後のコミットは元に戻さない方法は?

ホットタグ

アーカイブ