HEAD
より前のコミットがいくつかあります。コミットしている間に、私が気づいていなかったいくつかの変化があった。私のgit log
を見て、私はこれらの望ましくない変化に気づいた。 googleの'undo changes for an arbitrary commit'
を検索すると、コミット全体を元に戻してインデックス内の変更を削除すると、多くの結果が返されます。しかし、この任意のコミットでこれらの変更を削除する方法は何でしょうか?任意のコミットの変更を元に戻す方法は?
答えて
まず、作業ツリーがきれいであることを確認してください。 git status
これを見つけるのに役立ちます。コミットを待っている変更は報告しないでください。変更がある場合は、(必要に応じて一時的なブランチに)コミットするか、stashをコミットすることができます。
あなたが作業ツリーがクリーンであることを確認した後、現在のコミットにブランチを作成し、それをチェックアウトしません:
$ git branch backup
をそれが本当に必要されていない、あなたの代わりにREFLOGを使用することができますが、それこの方法ではより簡単に(そしてより目に見えるように)なります。 backup
はブランチのために選んだ名前に過ぎません。それは特別なものではありません。唯一の制約は、すでに存在してはならないということです。あなたは3分の1が過去にコミット変更したいと仮定すると、
、実行します。
$ 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
これは、 rebaseの計画を立てる。もちろん、最後の3つのコミットのハッシュとサブジェクトが含まれています。それらは時系列順(古いものから順に)の最後の4つのコミット(HEAD~4
のため)です。
変更したいコミット行(最初の行)を編集します。 pick
〜edit
に変更してファイルを保存し、エディタを終了します。
エディタを終了すると、Gitはリベースを開始します。コミットHEAD~3
をチェックアウトして終了し、プランに尋ねたとおりにコミットをedit
にすることができます。
必要な変更を行い、それらを実行してからgit commit --amend
を実行して、コミット(目標)を変更します。変更を行うための最善の方法を実行することです:
$ git reset --mixed HEAD~1
これは、変更したいコミットする前にファイルをインデックスに追加作業ツリーとは何も変更して、それは、た状態のレポをもたらします。索引に必要なファイルのみを追加してコミットします(なし、--amend
)。これは "編集済み" です。
コミットを編集した後でも、コミットされていない変更が作業ツリーに残っています。コミットするか(元の履歴には存在しなかった新しいコミットを作成する)、それらを隠して(そしてリベースを完了した後に適用する)か、完全に破棄するか(git reset --hard
;このコマンドを実行する前にそれらが必要です)。あなたがコミットされていない変更一つの方法または別の問題を解決した後
、実行します。
$ git rebase --continue
Gitはリベースを継続。他のコミットを計画内で指示したとおりに処理します。私たちの計画では、他のコミットにはpick
が記載されています。これはGitが変更したくないこれらのコミットの変更を適用することを意味しています。
すべてがうまくいけば、このコマンドが完了すると、望み通りに新しい履歴行が作成されます。あなたが望むように見えない場合は、実行することができます
$ git reset --hard backup
ここから始めてやり直してください。
リベースが正常に完了しない場合(競合が発生する可能性があります)、いつでもgit rebase --abort
を実行して中止できます。 Gitはすべての変更を元に戻し、どこから始めたのでしょうか(backup
ブランチが指しているコミット時)。
または、rebaseが完了するまで、競合、コミットおよび実行git rebase --continue
を解決できます。
リバースを何らかの方法で終了した後、結果に満足しているか、または過去のコミットを変更する考えが終わったら、git branch -D backup
を実行してバックアップブランチを削除します。
Gitのコミットは不変です。コミットを編集することはできません。コミットの「編集」は、実際には、古いコミットの代わりに使用される新しいコミットを作成します。もちろん、新しいコミットはオリジナルとは異なるハッシュを持っています。
古いコミットはまだリポジトリに存在し、そのハッシュまたはブランチを使用してアクセスできます。到達するために使用できるブランチがなく、reflogに参照がない場合、コミットオブジェクトは次のガベージコレクションサイクルで削除されます。
'$ git reset --mixed HEAD〜1'の周りにあなたのステップが少し混乱しています。ある時点で 'git commit --amend'をお勧めしますが、あとでcommitをno amendで実行してください。このrebaseの 'edit commit'に関連して1つか2つのコミットがありますか? –
Gitが停止してコミットを修正すると、編集したいコミットが生成された後**のRepoステータスが**同じです。いくつかの変更を行い、それらを実行して 'git commit --amend'を使って最後のコミット(編集するもの)を変更するか、(' git reset HEAD〜1'を使って)1つのコミットに戻って完全に生成することができます既存のものを編集する代わりに、新しいコミット。最初のオプションは、欠落したファイルを追加したり、小さな修正を加える場合に適しています。 2番目の方法はコミットからの変更を削除する方が効果的です。 – axiac
ああ、 'git commit --ammend'はファイルの追加、変更の追加、コミットメッセージの変更を許可しますが、' git reset HEAD〜1'はコミットの履歴をリセットし、 -add)履歴から消えたいファイルを正常にコミットします。元のコミットは不変なので、新しいコミット(新しいハッシュ)は古いものを置き換えます。それは正しい? –
- 1. コミットを元に戻す方法と、多くのコミットを元に戻す方法
- 2. 任意のディレクトリツリーをコミットする方法
- 3. フレームワーク変更の変更を元に戻す方法は?
- 4. Visual Studio 2015で、Gitでコミットを元に戻す/元に戻す方法は?
- 5. 変更をコミットしてgit flow release startを元に戻す方法
- 6. Gitリポジトリの最後のコミットを元に戻す方法は?
- 7. モデルへの変更を元に戻す方法は?
- 8. gitで保留中の変更を元に戻す方法は?
- 9. Git:1回のコミットで一連のコミットを元に戻す方法
- 10. コミットとクリーン作業ディレクトリを元に戻す方法は?
- 11. 最後のコミットを元に戻す方法
- 12. 任意の次元のナンシーアレイを再サンプリングする方法は?
- 13. Git:コミットを元に戻す方法と最後のブランチに戻す
- 14. Git:画像に変更をロールバック/元に戻す方法は?
- 15. 変更を元に戻す
- 16. Git - 変更を正しく元に戻す方法は?
- 17. SVN機能ブランチからの変更を元に戻す方法
- 18. Pycharmの変更を元に戻す方法
- 19. TFSのアンシェイプされた変更を元に戻す方法
- 20. ブランチを元のコミットに戻す
- 21. 以前にリルートされたコミットを "元に戻す"方法
- 22. Activerecordオブジェクトのローカル変更を元に戻す/元に戻す方法はありますか?
- 23. SHAを使ってコミットを元に戻す方法
- 24. 任意のバブルマップ変更データセット
- 25. SmartGit/Gitでコミット操作を元に戻す方法
- 26. C#を使用して任意のファイルを他の任意の形式(.rjb)に変換&元の形式に復元する方法
- 27. リストビューでの変更を元に戻す
- 28. uiファイルの変更を元に戻す
- 29. arrayList内の変更を元に戻す
- 30. 変更後のキャンバスを元に戻す
コミットを部分的に元に戻したいのですか?履歴を書き換えますか? – jonrsharpe
あなたが探しているコマンドは['git rebase --interactive'](https://git-scm.com/docs/git-rebase#git-rebase---interactive)です。 – axiac
@jonrsharpe私は歴史を書いても構いません。これらはすべてローカルな変更であり、私は元に戻すなどの複雑さを追加したくありません。私は単に '{change1、change2、change3}'から '{change1、change2}'に 'AB3ej'をコミットしたいと思っています。例えば、 –