[解決済み] Git Revert、Checkout、Resetの違いは何ですか?
質問
ファイルやプロジェクトを以前の状態に復元またはロールバックする方法を学ぼうとしているのですが、以下の違いがわかりません。
git revert
,
checkout
および
reset
. 一見同じような目的で3つの異なるコマンドがあるのはなぜか、また、どのような場合にどちらかを選択すべきなのか。
どのように解決するのですか?
この3つのコマンドは全く異なる目的を持っています。似て非なるものなのです。
git revert
このコマンドは、以前のコミットからの変更を取り消す新しいコミットを作成します。このコマンドはプロジェクトに新しい履歴を追加します(既存の履歴は変更しません)。
git checkout
このコマンドは、リポジトリからコンテンツをチェックアウトし、作業ツリーに配置します。また、このコマンドの起動方法によっては、他の効果も期待できます。例えば、現在作業しているブランチを変更することもできます。このコマンドは履歴を変更することはありません。
git reset
このコマンドは少し複雑です。実際には、起動の仕方によっていくつかの異なることをします。インデックスを変更します(いわゆる "ステージングエリア")。あるいは、ブランチヘッドが現在どのコミットを指しているかを変更します。このコマンドは既存の履歴を変更する可能性があります(ブランチが参照するコミットを変更することで)。
これらのコマンドを使用する
プロジェクトの歴史のどこかでコミットが行われ、後でそのコミットが間違っていて、行われるべきではなかったと判断した場合、次のようにします。
git revert
はこの仕事のためのツールです。これは間違ったコミットによってもたらされた変更を取り消し、履歴に "undo"を記録します。
作業ツリー内のファイルを変更したが、その変更をコミットしていない場合、そのファイルに対して
git checkout
を使用して、レポジトリからの新しいコピーをチェックアウトします。
コミットを行ったものの、まだ誰にもそれを公開していない場合、そしてそれが不要だと判断した場合。
git reset
を使用すると、そのコミットを行わなかったかのように履歴を書き換えることができます。
これらは、考えられる使用シナリオの一部に過ぎません。他にも状況によっては便利なコマンドがありますし、上記の3つのコマンドは他の使い方もあります。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] ファイルをリセットしたり、特定のリビジョンに戻したりするにはどうすればよいですか?
-
[解決済み] git add -A」と「git add .」の違い。
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] git reset --mixed, --soft, --hard の違いは何ですか?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
最新
-
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 revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】マージ後のコミットでGitエラー - fatal: マージ中に部分コミットができない
-
[解決済み】以下の追跡されていないワーキングツリーファイルは、マージによって上書きされますが、私は気にしません。
-
[解決済み] git rebase fatal: 必要なリビジョンは1つです。
-
[解決済み】「オリジン/マスターへのプッシュが拒否されました」というエラーが常に発生するのはなぜですか?
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] GIT_DISCOVERY_ACROSS_FILESYSTEM が設定されていない。
-
[解決済み] fatal: EOF が早い fatal: インデックスパックが失敗した
-
[解決済み] GitHubです。パーミッションが拒否されました (公開鍵)。
-
[解決済み] git リポジトリを特定のコミットまでロールバックするにはどうすればよいですか?