0
0

Git作業のやり直しについて

Posted at

記事の目的

  • 作業のやり直しについて記載
  • Pro Gitを基に記事を作成しました。
  • 後ほど記事の改修しやすいように元の記事から分離しました。

本文

  • 行った変更を取り消すための基本的なツールについての説明
  • 注意点:ここで扱う内容の中には「やり直しのやり直し」ができないものもある。

1.やり直し"--amend"

やり直しを行う場面としてよくあるもの

  • コミットを早まりすぎて追加すべきファイルを忘れてしまった
  • コミットメッセージが変になってしまった

--amend について

  • このコマンドは、ステージングエリアの内容をコミットに使用します。
  • コミットの直後にこのコマンドを実行したような場合、スナップショットの内容はまったく同じでありコミットメッセージを変更することになります。
もう一度やり直したい場合には **--amend** オプションをつけてもう一度コミットする。
$ git commit --amend
  • いったんコミットした後、何かのファイルをステージするのを忘れていたのに気づいた場合
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
  • 最終的に出来上がるのは一つのコミットです。2番目のコミットが、最初のコミットの結果を上書きするから。

2.ステージしたファイルの取り消し "git reset <file>"

・ステージングエリアと作業ディレクトリの変更に関する作業を扱う

ふたつのファイルを変更し、それぞれを別のコミットとするつもりだったのに間違えて git add * と打ち込んでしまった場合

問題点:「ファイルが両方ともステージされてしまった。」「ふたつのうちの一方だけのステージを解除するにはどうすればいいのか。」

$ git add *
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

      renamed:    README.md -> README
      modified:   CONTRIBUTING.md

git status が教えてくれる。
git reset HEAD <file> と書かれている。
アドバイスに従って CONTRIBUTING.md ファイルのステージの解除をする。

$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M   CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working
directory)

      modified:   CONTRIBUTING.md

CONTRIBUTING.mdファイルは、変更されたもののステージされていない状態に戻りました。

3.ファイルへの変更の取り消し "git checkout --<file>"

・ファイルへの変更を取り消せる。
・直近のコミット時点の状態、あるいは最初にクローンしたり最初に作業ディレクトリに取得したときの状態に戻す。
git status がやり方を教えてくれる

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working
directory)

    modified:   CONTRIBUTING.md

やり方が書いてあるので従ってみると

$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README

"git checkout -- [file]"は危険なコマンドであることです。ファイルに加えた変更は全て消えてしまいます。そのファイルが不要であることが確実にわかっている時以外は、このコマンドを使わないようにしましょう。

・やりたいことが「ファイルに加えた変更はとっておきつつ、一時的に横に追いやっておきたい」のであれば"stash"やブランチを調べてみましょう。一般的にこちらの方がおすすめです。

参考文献

Gitについてのリンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0