ワークツリーの変更を取り消す。
1 |
git checkout -- ファイル名またはディレクトリパス |
ワークツリーへの変更を取り消すことができます。直前のコミット内容まで復元できます。
全変更を取り消す
1 |
git checkout -- . |
--を付けている理由
「git checkoutコマンド」はブランチの変更にも使うコマンドになるのでファイル変更の取り消しと区別するために付けます。
裏側で起きている動作
「ステージングの情報」を「ワークツリー」に持ってきて上書きしています。(なので、git addでステージングに追加していない変更に関しては元に戻すことが可能になります。)
ステージングエリアに追加した変更をワークツリーへ戻す。
1 |
git reset HEAD ファイル名 |
「git add」を取り消しステージングエリアを復元することができます。HEADを付けるとステージングエリアを最新のコミット状態に戻すという意味になります。なお、あくまでステージングエリアの内容を最新に戻すだけでワークツリーの内容は全く影響はないのでその辺は認識しておきましょう。
なお、「git resetコマンド」にはコミット自体を取り消す機能もありますが、後で問題が起きる可能性があるのでその機能は使わないようにしましょう。
HEADとは?
今所属しているブランチの最新のコミットを指します。詳しくは下記でも解説しています。
前変更を取り消したい場合
1 |
git reset HEAD . |
コミットを取り消したい場合
直前のコミットを取り消したい場合
下記コマンドを実行すると今のステージの内容で直前のコミットを作り直す動作になります。
1 |
git commit --amend |
複数のコミットを取り消したい場合
下記コマンドを打つとエディタが立ち上がって修正したいコミットがpickという形で立ち上がります。もし、修正したいコミットであればpickをeditという文字列に修正します。その後修正を実施して修正が完了したら「git commit --amend」及び「git rebase --continue」等のコマンドを使ってコミットの修正の確定及び、別のコミットへの移動等を行います。
1 |
git rebase -i <コミットID> もしくは HEAD~(やり直したいコミット数) |
やり直したいコミット数
例えば、直前3回のコミットをやり直したいということであれば「git rebase -i HEAD~3」と記述します。
ファイルの内容を修正を実行する。
1 |
git commit --amend |
他の修正したいコミットに移る。
もし、他に修正したいコミットがなければ(全てpickとかになっていれば)コマンド自体が終了します。
1 |
git rebase --continue |
注意点
リモートリポジトリにPushしてしまったコミットに関してはやり直してはいけません。理由としては、リモートリポジトリにPushした内容は他の誰かが変更内容を取り込んでいる可能性があるためです。
すでにPushした内容をやり直す場合はどうすれば良いか。
取り消すことはできないので--amendを使わずに新しいコミットとして修正するようにしましょう。
ファイルの移動
コマンド
下記コマンドを実行するとファイル名が変更されてかつステージにも反映されています。
1 |
git mv <旧ファイル> <新ファイル> |
下記コマンドで代用は可能
通常のLinuxコマンドを使っても代替は可能なのでどちらを使っても大丈夫です。
1 2 3 |
mv <旧ファイル> <新ファイル> git rm <旧ファイル> git add <新ファイル> |
ファイルを削除
Git管理下のファイルやディレクトリを削除する。
1 |
git rm ファイル名 |
このコマンドを使うとファイルを物理的に削除をしてその情報をステージングエリアに登録します。その後にコミットをすることで削除作業が完了します。
ディレクトリを削除したい場合
1 |
git rm -r ディレクトリパス |
中にファイルがあるディレクトリは「-r」オプションを指定しなければ削除することができません。ディレクトリ内のファイルも全て削除をしてくれます。
Gitの記録からのみファイルを残したい場合
1 |
git rm --cached <ファイル名> |
これを使うとGitの履歴からファイルは消えますが、ワークツリーにはファイルが残ります。
用途
「パスワード付きのファイル」を管理する場合とかに使えます。(リポジトリ管理対象外からは外したいですがローカルには残しておきたい。)
この記事へのコメントはありません。