からコミットされていない作業ディレクトリへの変更を回復する方法はありますgit reset --hard HEAD
か?
git reset --hard somewhere
は非常に危険なgitコマンドの1つです。
からコミットされていない作業ディレクトリへの変更を回復する方法はありますgit reset --hard HEAD
か?
git reset --hard somewhere
は非常に危険なgitコマンドの1つです。
回答:
一般に、コミットされていない変更を取り戻すことはできません。
以前にステージングされた変更(git add
)は、インデックスオブジェクトから回復可能である必要があります。そうした場合は、を使用git fsck --lost-found
して、それに関連するオブジェクトを見つけます。(これにより、オブジェクトが.git/lost-found/
ディレクトリにgit show <filename>
書き込まれます。そこから、各ファイルの内容を確認するために使用できます。)
そうでない場合、ここでの答えは、バックアップを確認することです。多分あなたのeditor / IDEは一時的なコピーを/ tmpまたはC:\ TEMPおよびそのようなものの下に保存します。[1]
git reset HEAD@{1}
これは前のHEADに復元されます
[1] vimはオプションで永続的な取り消しを保存し、Eclipse IDEはローカル履歴を保存します。そのような機能はあなたのa **を節約するかもしれません
このSOからの回答
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
あなたは一日を取り戻しました!:)
git checkout HEAD@{19}
すると、失われたファイルを切り離された状態でチェックアウトできました。次にgit checkout -b new-branch-name
、それらを「接続」状態のリポジトリに追加するために使用されます。
git checkout -b new-branch-name
。「Gitを使用した実用的なバージョン管理」という本は、Gitを簡単に説明するのに適しています。
git reset --hard
今日もコミットされていない変更をしている間に、誤って今日も私のリポジトリを実行しました。それを取り戻すために、私はを実行しgit fsck --lost-found
、参照されていないすべてのblobをに書き込みました<path to repo>/.git/lost-found/
。ファイルはコミットされていないため、other
内のディレクトリで見つかりました<path to repo>/.git/lost-found/
。そこから、を使用してコミットされていないファイルを表示git show <filename>
し、BLOBをコピーして、名前を変更できます。
注:これは、保存するファイルをインデックスに追加した場合にのみ機能します(を使用git add .
)。ファイルがインデックスになかった場合、それらは失われます。
lost-found
。しかし、その後、git show
コンテンツを取得するために行うことができました。
#!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done
はい、 gitのハードリセットから回復できます。
使用する:
git reflog
コミットの識別子を取得します。次に使用します:
git reset --hard <commit-id-retrieved-using-reflog>
このトリックは私の人生を数回救いました。
ここにreflogのドキュメントがあります。
git reset --hard
別のものを使用することから回復するのは直観に反するように見えるかもしれgit reset --hard
ませんが、--hard
スイッチを使用しない場合、回復したばかりの作業を効果的に元に戻すことができるワークスペースのエントリが残ります。
git log
コミットのIDが表示されませんでした。でgit reflog
、私が見ることができるIDコミット
ローカルプロジェクトで作業しているときに、それをGitHubに移動して、新しいリポジトリを作成したいと考えていました。これらのすべてのファイルを.gitignoreを使用して新しいリポジトリに追加しようとしたときに、誤って間違ったファイルを追加して、それを消去しようとしました。
私は走ったgit reset --hard origin/master
:P
その後、リポジトリが空だったため、すべてのローカルファイルが削除されました。すべてがなくなったと思った。
これは私の命を救った:
git reflog show
git reset HEAD@{1}
git push
それが別の命を救うことを願っています。
git reset HEAD@\{27\}
、ありがとうございました!
git reflog show
する必要があります。チェックに使用し、その最初のコミットから使用しますgit reset HEAD@{number}
IntelliJのようなものを使用する場合:
コンテキストメニューで[ローカル履歴]を選択し、サブメニューの[履歴の表示]をクリックします。
プロジェクトまたはフォルダーのローカル履歴ビューには、過去数日間に行ったすべてが表示されます。ダイアログボックス下部の[アクション]列で、ロールバックするアクションを選択します。[...]そうすると、ダイアログボックスの上部に、変更されたファイルのツリービューが表示されます。それ以降に行われた他の変更に関係なく、削除したファイルのみを復元する場合は、ツリービューでLost.txtファイルを選択して、[元に戻す]ボタンをクリックします。
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
これはちょうど私のお尻を火から出した!
git reflog
変更をコミットしなかったため、機能しませんでした。git fsck --lost-found
ステージングされたファイルで機能しましたが、すべてがステージングされたわけではありません。IntelliJのローカル履歴により、未保存のファイルが完全に復元されました。この機能に感謝しています
私git reset --hard
はコミットしなかったすべての変更を行って失いました。幸い、私はエディター(IntelliJ)を使用しており、ローカル履歴から変更を復元することができました。Eclipseでも同じことができるはずです。
定義により、git reset --hard
コミットされていない変更をGitが回復する方法なしに破棄します(バックアップシステムは役立つかもしれませんが、Gitは役立ちません)。
実際、git reset --hard
良いアイデアが出されるケースはほとんどありません。ほとんどの場合、同じことを行うためのより安全なコマンドがあります。
コミットされていない変更を破棄する場合は、を使用しますgit stash
。これらの変更のバックアップが保持され、を実行するとしばらくすると期限切れになりますgit gc
。99.9%の場合、これらの変更が二度と必要になることはないと確信している場合git stash
でも、0.1%のケースの友です。あなたが100%確信している場合git stash
、これらの100%には測定エラーがあるため、それでもあなたの友達です;-)。
あなたHEAD
と歴史の中で現在の枝の先端を動かしたいなら、それgit reset --keep
はあなたの友達です。それは同じことを行いますgit reset --hard
が、うではないローカルの変更を破棄します。
あなたが両方をしたいなら、それgit stash && git reset --keep
はあなたの友達です。
指を使わないように教えてくださいgit reset --hard
。
git stash && git reset --hard
それが隠されたコンテンツを一掃するならば、それは正しいのでしょうか?
git reset --hard
隠し場所は破棄しません。コミットされていない変更をワークツリーから削除するという意味でののgit stash
代替ですgit reset --hard
。ただし、永続的に破棄するのではなく、安全に保持します。
誤ってコミットをハードリセットした場合は、これを行ってください。
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
仮定しHEAD@{2}
たい状態に戻りたい
これは、いくつかの変更を失った場合に私が通常行うことです。
git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
ポインタを以前のコミットに戻しますが、これまでに行った変更を最新のコミットチェックアウトに保持します git reset --soft dadada
情報は失われます。
コミットしなかったため、.gitがこの情報を保存することはありません。したがって、基本的にgit
は回復できません。
ただし、実行したばかりの場合git diff
は、次の3つの簡単な手順でターミナル出力を使用して回復する方法があります。
git diff
。o / pをdiff.patchというファイルに保存しますpatch -p1 < diff.patch
)を適用します助かります!:)
注:端末からファイルにデータをコピーしている間、データが連続出力であり、冗長なデータが含まれていない(上下の矢印を押すため)ことに注意して、はっきりと見てください。そうでなければ、あなたはそれを台無しにするかもしれません。
私は同じ問題に遭遇し、私はほとんど狂っていました......最初にプロジェクトをコミットしてマージしました。後で実行しようとするとgit push --set-upstream origin master
、このエラーが発生しました
fatal: refusing to merge unrelated histories
だから私は走った git reset --hard HEAD
、それは3週間のプロジェクトを削除しましたが、以下のいくつかのコマンドはその日を節約します:
git reset HEAD@{1} //this command unstage changes after reset
git fsck --lost-found //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
お役に立てれば
あなたがした後にコミットを取り戻すことができます reset --hard HEAD
。
「git reflog
」を使用して、履歴を確認しますHEAD
してブランチのます。
コミットとそのIDがここに表示されます。
する
git reset {commit Id of the commit you want to bring back}
私は前にコミットされていないファイルgit reset --hard <commit>
がgit履歴から削除されるという難しい方法を見つけました。しかし、幸運なことに、髪を抜く間ずっとコードエディターセッションを開いたままにしておくことがcontrol + z
できました。影響を受けた各ファイルのシンプルファイルがGit以前のバージョンにファイルの状態を返すことがわかりました。私が特に要求しなかったものはすべて、義務的にリセットします。Hooray!!
git reset HEAD@{4}
4は4ステップ前の変更です。正しい手順を選択すると、ハードから削除したファイルのリストが表示されます。次に行います:
$ git reflog show
作成済みのローカルコミット履歴が表示されます。今してください:
$ git reset --hard 8c4d112
8c4d112は、ハードをリセットしたいコードです。詳細については、https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-historyを見てみましょう 。
正解。OK、今はgitが好きです。:-)これがより簡単なレシピです。
git log HEAD@{2}
git reset --hard HEAD@{2}
「2」は、変更をコミットした場所に戻る回数です。私の場合、ビルドの問題をデバッグするのを助けるために同僚と上司に割り込まれました。そのため、リセットを2回行いました。したがって、HEADとHEAD @ {1}は上書きされました。ふew、私たちのハードワークを失ったでしょう。
(ユーザーのサブセットに適した回答)
(最近の)macOSを使用していて、Time Machineディスクから離れていても、OSはローカルスナップショットと呼ばれる1時間ごとのバックアップを保存し ます。
Time Machineに入り、失われたファイルに移動します。OSはそれからあなたに尋ねます:
The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?
失われたファイルを回復できるはずです。
git reset
。このコマンドは必要なく、危険なので、使用しないでください。ブランチを前のコミットに戻しgit rebase -i
、不要なコミットをドロップするか、git checkout
(ヘッドを切り離して)git branch -M
ブランチの先端を移動します。最初のものはローカルの変更での実行を拒否し、後者はローカルで変更されたファイルがリビジョン間で異ならない場合にのみ実行されます。