Gitコマンド入門::restore の謎解き!「第三回」
前回「第二回」は、restoreしたら、addできなくなってしまいましたけど、、、みなさんは、その原因を解明できましたか?
まあ~私も含めて、初心者は何をするにも、常に初めてですから、多少のトラブルはつきものですけどね。想像していたこと、一度でも、そう思ってしまったこと、その先入観をリセットするのって、本当に大変なんですよね~(苦笑)
とにかく、新しい情報を取り入れて考えないと、いつまで経っても新しい答えがでない。いつまでも、間違った情報で、間違った答えが出てくるんですよ! for(;;){ echo "><;;" }
ちなみに前回の記事はこちらから~
それでは、git add コマンドの動作確認から!
Working Tree(linux file folder) |
---|
README.md |
↓
↓ git add README.md
↓
Staging Area |
---|
README.md |
↓
↓ git commit -m "first commit"
↓
Git Repository |
---|
README.md |
次に、git restore コマンドの動作のおさらい!
Git Repository |
---|
README.md |
↓
↓ git restore --stage README.md
↓
Staging Area |
---|
README.md |
↓
↓ git restore README.md
↓
Working Tree (linux file folder) |
---|
README.md |
まあ、こんなイメージを想像していますよね!
で、、、そうそう、初心者は、肝心な意識が足りていないんです。勿論、私も!!
そもそも、gitの役割は、ファイルバージョン管理ですから、差異を常に意識している。そこが抜けてしまうと思考の盲点になる。つまり、ファイルの差分管理をしっかりしていて、それをステータスとして表示してくるんですよね~
更に、add, retore は、move ではない。copy である。
で、、、そうそう、これも、ついつい、move しているように考えてしまうのですが、所詮は、file copy なんです。そもそも、そうでないと、間違ってファイルを消したら、簡単にファイルを復元できませんからね。(苦笑)まとめると、gitは、ファイルの差分を管理しながら、copy する。つまるところですね。add、restoreしたら、両者間のファイル差分は、なくなるんですよね。あたり前のことを言ってると、さらに謎に聞こえてしまうかもしれませんが?(爆笑)
restore って、実際にはファイルの差分を、copy しています。
restore すると、Working Tree にその差分がコピーされて、結果、linux file folderのローカルファイルに保存されます。嘘だと思ったら、ファイル消して、restore してください!
[shiozumi@ovs-009 mygit]$ rm README.md
[shiozumi@ovs-009 mygit]$ ll
合計 0
[shiozumi@ovs-009 mygit]$ git restore README.md
[shiozumi@ovs-009 mygit]$ ll
合計 4
-rwxrwxr-x 1 shiozumi shiozumi 27 2月 5 18:14 README.md
[shiozumi@ovs-009 mygit]$ cat README.md
# note
結果3つ同じファイルがある? 実際には、差分を菅理!
Git Repository | Staging Area | Working Tree |
---|---|---|
README.md | README.md | README.md |
結論は、差分が発生していないと、add できない!
ですから、restore したら、Working Tree と、Staging Areaとのファイル差が無くなるわけです。つまり同じ内容のファイルだから、addできないんです。そして、差分があるときだけ、git status に表示される。※もしくは、Staging Areaにファイルが存在しない時だけです。
README.md を編集して、add してみましょう!
[shiozumi@ovs-009 mygit]$ vi README.md
[shiozumi@ovs-009 mygit]$ cat README.md
# note
# add // <-- ここに一行追加!
ファイルの差分が発生したので、今度は、addも成功して、git status コマンドでも表示されましたよね~(笑)
[shiozumi@ovs-009 mygit]$ git add README.md
[shiozumi@ovs-009 mygit]$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
これで、ローカルファイルの差分が、Staging Area に登録されて、今は、Git Repository との差がある状態となりました。つまるところ、git restore --staged コマンドを入力して、さらに、git restore を打てば、さっき変更した追加の一行は、また、消えるはずですね!
今回「第三回」は、ここまで! お疲れ様でした!(笑)
Discussion