web-dev-qa-db-ja.com

TFSに相当する「保留中の変更を元に戻す」を実行する方法

1つまたは複数のファイルに対して、GitでTFSの「保留中の変更を元に戻す」と同等の機能を実行するにはどうすればよいですか?

これは基本的に次の手順を実行することを意味します。

  • ディスク上の変更を元に戻す
  • Gitが発見した変更をリセットする
  • Gitからファイルの最新の変更を取得する

(1)を追加せずにディスク上で変更しただけの場合、これを行うためのコマンドの違い(ある場合)を知っておくとよいでしょう。 (2)はadd-commandを実行しましたとボーナスのために、(3)は変更をコミットした場合でもです。

33
Seb Nilsson

1と2の場合、必要なのは次のとおりです。

 git stash -u #same effect as git reset --hard, but can be undone

これは変更を破棄します。 resetを使用する場合は注意してください。リセットとチェックアウトを使用した、ハード、ソフト、混合オプションのインデックスと順列の操作について読んでください。 progit本はこれを詳細に説明しています: http://progit.org/2011/07/11/reset.html

3の場合

 git reset --hard HEAD^

ただし、保留中の変更がある場合に備えて、この前にgit stash -uを発行することをお勧めします。

これにより、現在のブランチが現在のコミットの親にリセットされます。 「木っぽい」をオンラインで検索します。参照の後に^および〜Nを使用すると、その参照の履歴内の到達可能なポイントをポイントできます。 gitで履歴がどのように追跡されるかを理解するために、「コンピューター科学者のためのGit」は有向非巡回グラフをよく説明しています: http://eagain.net/articles/git-for-computer-scientists/

現在のコミットの状態から個々のファイルを取得するには(つまり、変更を破棄する)、チェックアウトを使用できます

git checkout HEAD -- <a list of files>

上記の最後のリセットコマンドを誤って発行した場合、問題はありません。 Gitは、reflog内でブランチがポイントしていた場所を追跡します。

git reflog

あなたに歴史をリストします。この出力で、それぞれの参照方法を確認できます。

git reset --hard HEAD@{1}

ブランチをリセットして、以前は1つの変更であった場所に戻します。

さらに、無視されたファイルと追跡されていないファイルをワイプしたい場合は、次のようにワイプできます。

git clean -xdf
34
Adam Dymitruk

このコマンドは、ローカルの変更を元に戻し、リポジトリ内の現在のバージョンに復元します。

git reset --hard

次のコマンドを発行して、最後の有効なコミットに戻すことができます。

git reset --hard HEAD

1つのファイルだけを復元したい場合は、代わりにgit checkoutを使用します。

git checkout -- file_name.extension
git checkout HEAD file_name.extension
5
Manu
  1. git checkout [path]または(リポジトリ全体)git reset --hard HEAD
  2. git reset [path] に続く git checkout [path]
  3. git reset --hard [commit]でリポジトリの状態を復元するには[commit]、これは tree-ish である必要があります
2
Fred Foo

Eclipseを使用したGitでのTFS undoに相当するのは、ファイルを右クリックしてReplace with-> HEAD Revision(または任意のバージョン)を選択することです。

0