
わかっています、わかっています。しかし、Visual Studio 2015 では、あるいは TortoiseGit では、まったくgit revert
同じように動作しないことがわかりました。説明します。svn revert
私は VS2015 も Git も初めてです。VS2015 には Git 統合機能が最初から備わっていることを知り、試してみました。しかし、複数のファイルで作業していて、コミットする準備ができていたのはそのうちの 1 つだけでした。残念ながら、チーム エクスプローラー ペインで適用したフィルターは、コミットされたファイルには適用されませんでした (ボタンのタイトルが [すべてコミット] になっているのはそのためだと思います)。代わりに、すべての「ダーティ」ファイルがコミットされました。おっと!
TortoiseGit を使ってリポジトリのログを表示し、最新の (ローカル) コミットを選択し、「このコミットによる変更を元に戻す」で元に戻しました。この操作により、作業中のファイルがコミット前の「ダーティ」な状態 (SVN の元に戻す操作のように) に戻されると思っていましたが、驚いたことに、この操作によりローカル ファイルが以前の状態に戻りました。レポコミットする前の状態ではなく、バージョンに戻します。
もちろん、作業はすべて最初にコミットした「すべてのファイル」リビジョンにあったので、作業を取り戻すことができました。私は、そこから各ファイルを適切なディレクトリにコピーする作業に取り掛かりました。しかし、ここで私が見逃しているものは何でしょうか? Revert の代わりに使用すべき Git 機能があるのでしょうか?
答え1
Git では、コミット全体を削除できます。プッシュされていないコミットに対してのみこれを行うことをお勧めします。Git の「分散」部分全体がそれを可能にします。SVN を使用すると、変更はすぐに他のユーザーに公開されます。Git では、変更はプッシュされた後 (Visual Studio の「同期」) にのみ公開されます。
したがって、コミットを元に戻す代わりに (誤った変更がリポジトリに残り、予期しない副作用が生じる可能性があります)、 を実行しますgit reset --mixed HEAD~1
。つまり、作業ディレクトリはそのまま残りますが、最後のコミットは削除されます。つまり、Git はすべてのファイルを変更済みとして再度表示します。
Git で元に戻すと、元に戻したコミットの「逆」コミットが作成され、すべての変更が元に戻されます。
次に、単一のファイルのみをコミットするには、まず を使用して、 git status
Git に不要な変更がステージングされていないことを確認します。次に、 を使用してgit add path/to/file.txt
そのファイルのみをステージングします。その後、 を実行しgit commit
、適切なコミット メッセージを使用すれば完了です。
実行してgit commit
テキスト エディターがポップアップすると、ファイルにはコミットされる変更のリストも含まれます。このリストを注意深く調べて、必要なものだけをコミットするようにしてください。
また、Visual Studio を使用して Git を積極的に操作しないでください。Visual Studio は従来の TFS 用語を Git 操作に適用しようとしますが、同じではありません。代わりに、コンソールで Git を学習してください。Visual Studio には、優れた差分ビューなど、読み取り専用作業のための優れた特典がいくつかあります。