微妙な違い

色々スルーしてる部分が多いなと。
例えば先日も_こんなやり方があるんだ_と列挙させて頂いてた git diff HEAD と git diff --cached の違いですが、

  • git diff HEAD は最新コミットとワークツリーの差分を出力
  • git diff --cached はインデックスの状態と指定されたコミットとの差分 (無指定の場合は HEAD) を出力

とのこと。むむむむ。
ちなみにただの git diff はインデクスとワークツリーの差分、になるのかな。

branch

あるいは git checkout -b というコマンドですが、濱野さん本によれば以下とのこと。

$ git checkout -b 新しいブランチ名 ブランチの視点コミット

通常以下なことしてますが

$ git checkout -b feature-A

これは以下の省略形なんですね。

$ git checkout -b feature-A origin/master

push

これも略する書き方があってアレ。

$ git push

だと以下な省略形とかってやつです。

$ git push origin master

origin ってのは .git/config の中に "origin" という名前の付いた remote repository が定義されてるのでソコね、という指定で3つめの引数はローカルの master を push します、って意味になるのか。あるいは

$ git pull

という操作は以下と同じ、と認識してるのですが

$ git fetch
$ git merge origin/master

だとすると省略形は以下になるのかどうか。

$ git pull origin/master master

む、濱野さん本の 13.10.1 に記述がありますね。曰く

$ git push プッシュ先リポジトリ プッシュするリファレンス指定

とあります。リファレンスの一般的な形式は以下とのこと。

プッシュするオブジェクトのオブジェクト名と、プッシュする先のリファレンス名とを、コロン (:) で区切って並べたものです。
ただし、コロンの前後に書く文字列が同じになる場合は、コロンを含めて省略してしまっても構いません。

入門 Git より引用
ということは本当は上のナニではなくて

$ git push origin master:master

が、という事みたいです。むむむむ。
あ、そういえばリモートブランチ削除って以下だったような。

$ git push origin :feature-A

ということは上記は濱野さん本曰く「空っぽの歴史でそのブランチを更新する」という事になるのですね。なるほど。