2019-03-03   git 

gitの操作でまちがったときの取り消し練習

参照

手順

準備:初期化など

$ mkdir sample        # ディレクトリを作る
$ cd sample           # そこに行く
$ git init            # リポジトリを初期化する

$ echo "Hello, world." > README     # README ファイルを作る
$ git add README                    # add する
$ git commit -m "Adddd read-me."    # commit する
$ git log                           # ログを見る
commit e33533965935d7f8f8756b7135f3f2df28211289 (HEAD -> master)
Author: Hiroshi Yuki 
Date:   Sun Mar 3 21:20:17 2019 +0900

    Adddd read-me.                  # コミットログが変だ!

最新コミットログの修正

$ git commit --amend -m "Add README."   # 最新コミットログを上書き
$ git log                               # ログを見る(修正されている)
commit 1fcc6bf6dd6787186b265e0df40b1c38de52406d (HEAD -> master)
Author: Hiroshi Yuki 
Date:   Sun Mar 3 21:20:17 2019 +0900

    Add README.

入れ忘れたファイルを最新コミットに追加する修正

GREETINGというファイルを最新コミットに追加したい。

$ echo "Good morning." > GREETING                   # GREETING ファイルを作る
$ git add GREETING                                  # add する
$ git commit --amend -m "Add README and GREETING."  # commit する
$ git log                                           # ログを見る(修正されている)
commit 34997731b35773e0164761e33fc22eb88bf48726 (HEAD -> master)
Author: Hiroshi Yuki 
Date:   Sun Mar 3 21:20:17 2019 +0900

    Add README and GREETING.

準備:余計なファイルをaddしておく

$ echo "Good night." > SLEEPY     # SLEEPY ファイルを作る
$ git add SLEEPY                  # add する
$ git status                      # status を見る(確かに add されている)
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)   # ←ここに戻し方が書いてある

    new file:   SLEEPY

ステージングエリアから作業ディレクトリにファイルを戻す修正

$ git reset HEAD SLEEPY    # add していない状態に戻す
$ git status               # status を見る(確かに add 前に戻った)
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    SLEEPY

nothing added to commit but untracked files present (use "git add" to track)
$ rm SLEEPY               # もういらないので削除しておく

最新コミットから作業ディレクトリにファイルを戻す修正

$ echo "Good afternoon." >> GREETING    # GREETING を編集した
$ cat GREETING                          # 現在の内容を確認する
Good morning.
Good afternoon.

$ git add GREETING                      # add する
$ git commit -m "Fix GREETING."         # commit する(*)
$ echo "Bla Bla Bla" > GREETING         # さらに GREETING を編集した
$ cat GREETING                          # 現在の内容を確認する
Bla Bla Bla

$ git checkout -- GREETING              # この編集は気にくわない。最新コミット(*)まで戻す
$ cat GREETING                          # 現在の内容を確認する(確かに戻っている)
Good morning.
Good afternoon.

まとめ

$ git commit --amend -m "CORRECT MESSAGE"   # 最新コミットログの修正
$ git reset HEAD filename                   # ステージングエリアから作業ディレクトリにファイルを戻す 
$ git checkout -- filename                  # 最新コミットから作業ディレクトリにファイルを戻す(上書き)
作業ディレクトリ →add→ ステージングエリア →commit→ リポジトリ
 2019-03-03   git