Gitコマンド入門::restoreの動作解明中!「第七回」
シナリオその3が正しいとなると・・・
こんにちは~ 前回は謎のまま、クラッシュした状態で終わってしまいましたけど、みなさんは大丈夫でしたか? まあ~、そもそもですが、同時オプション設定時に2通りの結果が予測される時点で、疑問が湧いてくるぐらい謎だったんですよね~(苦笑)つまるところ、私がgitを開発する立場なら、オプションの優先順位を明確にすると思いますからね。例えば、--working --staged と記載したら、シナリオ1、前後を入れ替えて、--staged --working と書いたらシナリオ2 このように使い分けれるような仕様にするとかしないと、gitツール側でも処理フローに矛盾が残ったままになってしまいますからね~[1] ><
ちなみに前回の記事は、こちらです!
README.md の初期状態
各領域 | Working Tree | Staging Area | Git Repository |
---|---|---|---|
ファイル名 | README.md | README.md | README.md |
内容 | test add (^^) | test add | test |
- git restore --worktree --staged README.md --> 1番の結果へ
- git restore --staged --worktree README.md --> 2番の結果へ
1番の結果:--worktree --staged の順番で処理
各領域 | Working Tree | Staging Area | Git Repository |
---|---|---|---|
ファイル名 | README.md | README.md | README.md |
内容 | test add | test | test |
2番の結果:--staged --worktree の順番で処理
各領域 | Working Tree | Staging Area | Git Repository |
---|---|---|---|
ファイル名 | README.md | README.md | README.md |
内容 | test | test | test |
実際は3番目のシナリオ! --staged 無視される!
各領域 | Working Tree | Staging Area | Git Repository |
---|---|---|---|
ファイル名 | README.md | README.md | README.md |
内容 | test add | test add | test |
いくつか、他のサイトなども調べたりしていましたが、おそらく間違って理解しているサイトの情報もありましたので、少しご注意ください。これから調べていくので、私が間違っている可能性もありますけど、、、現時点では、どうやっても、--worktree と、--staged の同時指定は、無視されます。[3]
ここまでを、振り返った感想!
Git2.23から導入された、restoreコマンドをここまで調べて来ましたけど、私自身が、そもそも、gitの熟練者ではありませんから、そのアプローチ、調べ方も独自になっています。その結果が、読者の皆さんには、ご迷惑をかけているかも知れませんね。もしそうだとしたら、ごめんなさい。私の狙いとしては、なるべく分かりやすく、少しずつ理解が深まるようにと、初心者の方が躓きそうなところ、疑問に思う点なども想像して、ここまで進めてきましたが、実際のところどうでしょうか? まあ~、つまるところ私自身の経験がゲームプログラマー上がりですから、もしかすると、普通の今時のプログラマーさんとは大きく異なる可能性もあるかな?!・・・なんて思っています。(苦笑)ということで、興味をもって頂いた方には感謝しておりますし、私の指向性を少しでも理解して頂き、お役に立てたなら本望ですね。それでは、引き続きをどうぞ!
git diff を使って再確認!
さあ~ Working / Staging / Repogitory がそれぞれの領域で認識している、ファイルの差分を簡単に調べるコマンド、diff も、これから使って行きましょう! git status だけだと、少し頭が混乱してしまう時もありますからね~
では、この初期状態で、git diff を実行しましょう!
各領域 | Working Tree | Staging Area | Git Repository |
---|---|---|---|
ファイル名 | README.md | README.md | README.md |
内容 | test add (^^) | test add | test |
[shiozumi@ovs-009 mygit]$ git diff
diff --git a/README.md b/README.md
index fd66901..0811606 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
# test
# add
+# (^^)
git diff
これも省略系なので、本来なら、git diff [Working] [Staging]
[5]と意識しておきましょうね。
補足:一番下の行、薄い、緑色の網掛け[6]の部分が差分です。実データーは、(^^)です。他の部分は、ここでは、説明しませんが、また後ほど!
[7] を実行しましょう!
次に、git diff HEAD[shiozumi@ovs-009 mygit]$ git diff HEAD
diff --git a/README.md b/README.md
index fd7407f..0811606 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
# test
-
+# add
+# (^^)
補足:下3行、薄い、赤色[8]と緑色の網掛けの部分が差分です。おそらく、Repogitory で認識している、README.mdでは、# test の下に、一行改行が入っているのでしょう!
最後に、git diff --staged を実行しましょう!
[shiozumi@ovs-009 mygit]$ git diff --staged
diff --git a/README.md b/README.md
index fd7407f..fd66901 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
# test
-
+# add
補足:下2行、薄い、赤色と緑色の網掛けの部分が差分です。先ほどと同じ説明となります。
git diff を使うと、status よりも分かりやすい!
各領域で認識している、実際のファイルの中身、差分を明示してくれるので、これからは、こちらのコマンドもしっかり使って行きますよ!(笑)というか、もっと先に覚えるべきだったかな?
作図しました。更にイメージをしっかりと!
まとめ
- git diff は、[working] [staging] との比較、差分を表示
- git diff --staged は、[staging] [Repogitory] との比較、差分を表示
- git diff HEAD は、[working] [Repogitory] との比較、差分を表示
省略形の再認識
- git diff を、git diff --working[省略] --staged[省略] と意識する!
- git diff --staged を、git diff --staged HEAD[省略] と意識する!
- git diff HEAD を、git diff --working[省略] HEAD と意識する!
さあ~、そろそろ、本題に戻りましょう!
[shiozumi@ovs-009 mygit]$ git restore --help
// 中略 ~
git restore [<options>] [--source=<tree>] [--staged] [--worktree] <pathspec>...
発見! --source=<tree> ってなんだ?
これは明らかに、最初に設定しろっていうこと?! 新しいオプションが見つかりましたよ~、いやあ~、それにしても今回は完全にスルーしていましたね。きっと、--source=<tree> を追加で指定すると、正常に動作するのでしょう・・・新しい未来が、またひとつ見えてきましたよ!
今回「第七回」は、ここまで! お疲れ様でした!
-
--staged --worktreeの同時指定は、--source==<tree>で実現できるようになります。 ↩︎
-
指向性としては、かなり脱線していますが、素の気持ちです。(笑) ↩︎
-
他の引数を追加で指定してあげると、同時処理ができるようになります。ただ、シナリオ1、2とは違う動作となりますので、ご注意ください。 ↩︎
-
始めて方は、少しだけでも使い方を覚えて置きましょう! ↩︎
-
実際には、Working の指定は、出来ないようです。 ↩︎
-
+の記号は、ファイルとの比較で、追加されている部分となります。 ↩︎
-
HEADについては、又、次回以降で説明しますね。現状では、最新のRepositoryと思っていただければ、特に問題ありません。 ↩︎
-
-の記号は、ファイルとの比較で、不足している部分となります。 ↩︎
Discussion