誤ってチェックアウトした後、変更内容を元に戻すには?
質問
以下は私のレポの状態でした。
[~/rails_apps/jekyll_apps/nepalonrails (design)⚡] ➔ gst
# On branch design
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: _layouts/default.html
# deleted: _site/blog/2010/04/07/welcome-to-niraj-blog/index.html
# deleted: _site/blog/2010/04/08/the-code-syntax-highlight/index.html
# deleted: _site/blog/2010/05/01/showing-demo-to-kalyan/index.html
# deleted: _site/config.ru
# deleted: _site/index.html
# deleted: _site/static/css/style.css
# deleted: _site/static/css/syntax.css
# modified: static/css/style.css
#
no changes added to commit (use "git add" and/or "git commit -a")
正確には、私が行った
git checkout -f
を実行したのですが、今、その変更はなくなりました。これは、私が行うことになっていませんでした。
[~/rails_apps/jekyll_apps/nepalonrails (design)⚡] ➔ git co -f
[~/rails_apps/jekyll_apps/nepalonrails (design)] ➔ gst
# On branch design
nothing to commit (working directory clean)
[~/rails_apps/jekyll_apps/nepalonrails (design)] ➔
変更を元に戻すことはできますか?
どのように解決するのですか?
プライベートなデータ(インデックスに追加されず、コミットもされていない、つまりgitに知られていないデータ)は、現在の作業ディレクトリに他のバックアッププロセスがない限り、復元できないと思います。
で提案されていない場合でも
Git Aliases ページ
のように、チェックアウトのエイリアスが必要だと思います。
alias rm /bin/rm -i
があるように)。
[alias]
co = !sh -c 'git stash; git stash apply; git checkout "$@"'
で、'
git stash; git stash apply
で使用されるチェックポイント技術です。
ブライアン・キャンベル
で
彼の答え
.
co = "!git stash push -m \"co backup\"; git stash apply; git checkout \"$@\""
なお、バックアップの隠し場所を伝えるためのメッセージを追加しました。-
この問題は、この動作に関する以下のような議論を思い出させます。 ycombinator (抜粋) を思い出しました。
私はgitでたくさんのデータを失いました。
そのほとんどは、データを削除するときに確認を求めない無難な響きのコマンドと関係があります .
たとえばgit checkout filename
はsvn revert filename
.
もちろんgit checkout branchname
は全く違うことをします。
ブランチとファイルが同じ名前を共有している場合、git はデフォルトでブランチを切り替えますが、それでも bash のオートコンプリートがその日を台無しにするのを止めることはできません。無害な動作と危険な動作がある場合、同じコマンドでラベル付けをしないことです。
うっとうしいかもしれませんが、これは設計ミスではなく、ユーザーエラーです。git では、作業コピーを無損失に破棄したい場合、単に "
git stash
とすることができます。
あなたの論理では、"rm" は、以下を渡すときに確認を要求しないので欠陥があります。-f
ではなく-i
. まあ、そうなんだけど。すみません。
<ブロッククオート
あなたの例えは、次のような場合、より正確になります。
rm somename
が
apt-get update
と同じであり
rm othername
は
rm -fr othername
.
それにしても、"が正しいわけがない。
get checkout foo
は、カレントディレクトリに foo というファイルがあるかどうかによって、2 つの全く異なる処理のうちの 1 つを行います。
もうひとつ、とんでもないアイディアがあります。
git checkout ...
' をダーティなワークツリー上で実行しないことです。問題は解決しました。
もうひとつは、ファイル名をブランチ名として再利用しないことです。
正直に言うと、私は不注意な'co'の呼び出しに同じ問題を抱えています。rm
の不用意な呼び出しで一日が台無しになることはありますが、私が罵声を浴びせるのは私の怠惰や愚かさに対してであって、bashの補完や'rm
'
関連
-
[解決済み] .gitignoreと "以下の未追跡の作業ツリーファイルはチェックアウトで上書きされます"
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] ステージングされた変更を表示するにはどうしたらいいですか?
-
[解決済み] Git のコミットで変更点を確認するには?
-
[解決済み] git のコミットを削除しても、変更は維持できますか?
-
[解決済み] 現在の作業ディレクトリにあるコミットされていない変更点から git パッチを作成する
-
[解決済み] Git で master の変更をブランチに取り込む
-
[解決済み] git reset」と「git checkout」の違いは何ですか?
-
[解決済み] Gitサブモジュールの未追跡状態を解消するには?
-
[解決済み] git diff を stdout に書き出すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Git がエラーを報告しました。現在のブランチの先端が遅れているため、更新が拒否されました。
-
git reset --hardとgit reset --softの違いについて
-
git push issues
-
[解決済み] [Solved] リモートの変更を破棄して、ファイルに "解決済み "のマークを付けるには?
-
[解決済み] gitでステージングされていない変更点の一部を元に戻す
-
[解決済み] キーフィンガープリントが原因でHerokuにプッシュできない
-
[解決済み] gitにもsvnのような無視コマンドはありますか?
-
[解決済み] なぜgit AuthorDateはCommitDateと違うのですか?
-
[解決済み] gitは "サイレントモード "で動作しますか?
-
[解決済み] git add を実行してもしなくても、ブランチを切り替えたときに自分の変更点(修正、追加、削除されたファイル)が表示され続けるのはなぜですか?