LoginSignup
1
0

More than 1 year has passed since last update.

はじめに

僕は今年の夏からエンジニアインターンをしています。
ちなみに僕は文系なのでインターンをするまではずっと独学でした。
この機会にインターンを通して得たものを共有していければと思います。
また、Qiitanのぬいぐるみがどうしても欲しいので25記事を必ず完走します!!

まずはGitについてです。
独学でプログラミングをしていると、チーム開発をする機会はほとんどないのでGitを触るにしても何となくの理解で終わってしまうことが多いと思います。
実際に僕はそうだったので最初の1ヶ月とかはかなり苦労しました。

大原則

調べてみて、それが本当に正しいかわからないときは先輩のエンジニアに聞きましょう。
概念理解があっていたとしてもチームのリポジトリ管理規則とは違うなんてこともあると思います。

git add

gitではcommitする前にaddしますが、僕はこれをずっとただの呪文だと思っていました。

実際にはファイルごとのblobハッシュが作成されてindexに登録(ステージング)されています。

index

indexはcommit予備軍でindexに登録されていない変更分やファイルはコミットすることができません。
どのファイルがステージングされているかは、下記のコマンドでみることができます。

    git ls-files --stage

blobハッシュ

blobとはbinary large objectの略称です。
git add することによってファイルの中身が圧縮されてblobハッシュが作成されます。
blobハッシュの中身は下記のコマンドでみることができます。

    git cat-file -p blob_hash

ステージングを取り消したいとき

多分、vscodeだと左上のところをぽちぽちするのが1番早いです。

    git restore --stage file_name

ファイル削除時

ファイル削除しただけではgitの追跡は終了していないので、indexに登録する必要があります。

    git rm file_name

これでステージングまで一発でしてくれます。そうでない場合は下記のようになります。

    rm file_name
    git add file_name

ファイル名変更時

普通にファイル名を変更すると、gitは1つファイルを削除して新しく1つファイルを作成したと認識します。
gitにリネームしたと認識させるためには、下記のコマンドを使います。

    git mv old_file_name new_file_name

git commit

commitすることによってローカルのリポジトリに変更分が登録されますが、ここでは主に3つのことが行われています。

  1. indexからtreeオブジェクトの作成
  2. commitオブジェクトの作成
  3. HEADを新しいcommitオブジェクトに書き換える

treeオブジェクト

blobハッシュは1つのファイルの情報を持つものでしたが、treeオブジェクトはディレクトリの情報をもつものです。
blobハッシュの時と同様にgit cat-file -p tree_objectで中身を確認することができます。

    100644 blob e23d3c182b4717ed8c4af71caaf711ccb6f8402c    README.md
    100644 blob eb6bfd5aae58ede909be100cfadedf01ce4a3b70    docker.txt
    100644 blob 41e2cdea70dfb1603d1d0abf891a4d1522cc6671    feature.txt
    100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    for-stash.txt
    040000 tree 40e61af83f1c6bd75e41fa5643a480824d61dd32    fuga
    100644 blob 93034466dfd7dce785e1a5398f8cb80b8fdc343f    hoge.txt

それぞれのファイルのblobハッシュやディレクトリのtreeオブジェクトを管理していることがわかります。
commitした際にはまず、上の例のようなtreeオブジェクトが作成されます。

commitオブジェクト

commitオブジェクトはtreeオブジェクトとcommitに関する情報(コミットメッセージや親コミットや作成者など)を持つオブジェクトです。
commitオブジェクトは1番最初以外は常に親コミットを持っているためブロックチェーンのようになっています。
これも同様にgit cat-file -p commit_objectで確認することができます。

HEAD

HEADについては別記事で書きます!

fixup 

    git commit --fixup commit_object

上記のようにfixupを使うと、指定したcommit_objectのコミットメッセージに「!」が追加されたコミットメッセージを持つ新しいコミットが作成されます。
レビューをもらうごとに新しいコミットメッセージを付けるのはナンセンスなので、レビュー修正の際には基本的にfixupを使っています。

参考にしたサイト

1
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
1
0