LoginSignup
0
0

More than 1 year has passed since last update.

3/29 git part1

Last updated at Posted at 2023-03-29

個人的リマインド用

基礎

Gitはスナップショットを記録する
→ファイルが変更されたときは、差分を保存するのではなくまるまる保存する
(理由はブランチとか使う時に差分の計算がいらないから早くなる)

ローカル(自分のPC)でスナップショットを記録→Githubへアップ
ワークツリー(作業場)でスナップショットを記録
→ローカルリポジトリ(自分のPC)へ保存
→Github(リモートリポジトリへ保存)

逆に他の人の作業を自分のとこに反映させたい時
Github(リモートリポジトリ)
→ローカルリポジトリ(自分のPC)でGithubの記録を取得
→ワークツリー(作業場)でGithubの記録を反映

ローカルは3つのエリアに分かれている(下から上へ)

(リポジトリ)git commitで追加

スナップショットを記録する場所
(ステージ)git addで追加

コミットする変更を準備する場所
※コミットとはスナップショットの記録のこと

なぜこんなことをするのか
→手元には変更したファイルと、変更してないファイルがある場合もある
 そんな時変更した分だけをリポジトリに記録できるように
(ワークツリー)

ファイルを変更する作業場

ギットのデータの持ち方(コミットまでの流れ)

index.htmlがワークツリーにある
→圧縮ファイルA(index.html)のファイル内容を圧縮(まずリポジトリにおかれる)
→インデックス(index.html 圧縮ファイルA)がステージに保存される
ここまでがgit addで起こっていること
→インデックスからツリー1(ファイル構成を表したファイル)を作成(リポジトリに置かれる)
→ツリー1からコミット1(ツリー名、作成者、日付、コミットメッセージ)を作成

現在リポジトリには圧縮ファイルA、ツリー1、コミット1の3つがある

次に2つ目のファイル(home.css)をコミットしようとする時
→全体の流れは上と同じだがコミット2を作成する際に、コミット1も記録する
(変更履歴を辿れるように)

index.htmlを変更した時
→圧縮ファイルCを作成(変更していないcssファイルは圧縮しない)
→インデックスの段階で圧縮ファイルAから圧縮ファイルCに変更
→それにともないツリー3にもその記録が保存される
→コミット3ではツリー3と親コミット2も記録

→Gitオブジェクト、圧縮ファイル、ツリーファイル、コミットファイル、ツリーファイルのインストール方についてはudemyから

gitを始める

ローカルリポジトリの新規作成

git init

→.gitディレクトリが作成される
(リポジトリ、圧縮ファイル、ツリーファイル、コミットファイル、インデックスファイル、設定ファイル)
objectsの中に色々入ってくる

Gitリポジトリのコピーを作成する

git clone <リポジトリ名> クローン(コピー)を作成される

他の人のコードをコピーする
リモートリポジトリのコピーがワークツリーにコピーされる
.gitディレクトリがコピーされる

変更をステージに追加する

git add <ファイル名>
git add <ディレクトリ名>
git add .

変更を記録する(コミット)

git commit
git commit -m "メッセージ"
git commit -v ファイルにどんな変更をしたかエディター上で確認できる

何を記録するか:変更、新規作成、削除、複数ファイルの変更・作成・削除

簡単に書くときはわかりやすくコミットメッセージを書く(大体1行で)
正式に書くときは一行目に変更内容の要約、2行目に空行、3行目に変更した理由

おまけ

vim/vi 怖い
iを1回押せば入力モードに
→文字入力したらすかさずesc
→:wqで保存終了、:q!で保存せず終了

現在の変更状況を確認する

git status
ワークツリーとステージの間で変更されたファイル、リポジトリとステージの間で変更されたファイルがわかる

変更差分を確認する

git addする前の変更分
git diff <ファイル名>

git addした後の変更分
git diff --staged

変更履歴を確認する

git log

1行で表示する
git log --oneline

ファイルの変更差分を表示する
git log -p index.html

表示するコミット数を制限する
git log -n <コミット数>

ファイルの削除を記録する

ファイルごと削除
git rm <ファイル名>
git rm -r <ディレクトリ名>

ワークツリーにファイルを残したい(gitの記録だけ消したい)とき
git rm -cached <ファイル名>

ファイルの移動を記録する

git mv <旧ファイル> <新ファイル>

以下のコマンドと同じ
mv <旧ファイル> <新ファイル>
git rm <旧ファイル>
git add <新ファイル>

リモートリポジトリ(GitHub)を新規追加する

git remote add origin
    https://github~(githubのURL)

(意味)originというショートカットでURLのリモートリポジトリを登録する
毎回URLを書く必要がなくなりoriginでよくなる

リモートリポジトリ(GitHub)へ送信する

git push <リモート名> <ブランチ名>
git push origin master 

git push -u origin master 次回以降origin masterをpushする時にgit pushだけで良くなる

ローカルリポジトリの内容をリモートリポジトリに送ることを「プッシュ」という

コマンドにエイリアスをつける

git config --global alias.ci commit コミットをciに
git config --global alias.st status statusをstに
git config --global alias.br branch branchをbrに
git config --global alias.co checkout checkoutをcoに

--globalをつけるとPC全体の設定になる
project/.git/configというローカルリポジトリに格納

管理しないファイルをGitの管理から外す

管理したくないファイル
・パスワードなどの秘密情報が記載されたファイル
・チームの開発で必要ではないファイル

どうやってやるの?
.gitignoreファイルに指定する

.gitignoreファイルの書き方

指定したファイルを除外
index.html
ルートディレクトリを指定
/root.html (一番てっぺんのディレクトリ)
ディレクトリ以下を除外
dir/
/以外の文字列にマッチ
/*/*.css (1つ下の階層にある任意のcssファイル)

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