2017-01-12 5 views
0

開発プロセスの間にコミットコマンドなしで複数のaddコマンドを実行するのが一般的です(少なくとも私にとって)。これから、gitが最後に実行されたaddコマンドに関連してファイル内の変更を元に戻すことをサポートしているかどうかを知りたいのですが?具体例を示します:Gitの最後のaddコマンドの関係で最後の変更を元に戻すことはできますか?

一意のファイルfoo.txtを持つきれいな作業ツリー上にいるとします。このファイルの一部の内容を変更し、addコマンドを使用してステージ領域に追加します。しかし、シーケンス内でコミットを行う代わりに、ファイルfoo.txtにさらに変更を加えることにします。その後、変更は不要で、変更を元に戻したいと思いますが、すべての変更を元に戻したくないだけでなく、addコマンドの後に行った変更だけを元に戻すこともできます。

これを行うにはどうすればよいですか?

おかげ

+0

試しましたか?http://stackoverflow.com/questions/52704/how-do-i-discard-unstaged-changes-in-git#12184274? – Alissa

答えて

0

ファイルがgit addedの場合:

git checkout file 

は、追加の状態にディスク上のファイルを元に戻します。

0

gitはステージング領域に追加された異なるバージョンのファイルの履歴を保持しているように見えることから始めることができます。私は長い間、gitのエキスパートではありませんが、ここでgitが内部的に何をしているかを見ました。

git initで空のgitリポジトリを作成しました。このディレクトリに "one"という名前のファイルを1つ作成し、そこにテキスト "1"を配置しました。私はgit add .をしました。 .git\objectsフォルダにジャンプすると、オブジェクト用のフォルダが1つ表示されます(現在はinfopackフォルダは除外しています)。私の場合、フォルダはf3でした。

git cat-file blob f33dfa25aa16a97ca941fe1d9cabdc3689179f3f 

、コンテンツが「1」だった:私はので、私はそれが内容だ表示、そこに入った3dfa25aa16a97ca941fe1d9cabdc3689179f3fと呼ばれる1つのファイルを見ました。

新しいgitリポジトリで上記のプロセスを繰り返しましたが、今度はあなたが言ったことをしました:ファイルを編集してgit addを実行し、ファイルをもう少し編集し、別のファイルをgit addにしました。今私が.git\objectsフォルダに入ったとき、私は2つのフォルダを見ることができます(今度はinfopackを無視しています)。 2つのフォルダの下にある各ブロブの内容を確認すると、編集した内容が表示されます。

gitはステージングエリアにこれらの異なるオブジェクトのリンクリストを保持していますか?それは残念なことに私が答えることができない興味深い質問です。

thsストーリーの道徳:コミットはgitで安いので、早くコミットし、頻繁にコミットします。

関連する問題