はじめに
改めてGITを勉強したので、備忘録として残しておきます。
Git
Gitとは分散型バージョン管理システムのことで、Linuxのソースコードを効果的に管理するために作られた。
Gitを使うメリット
・編集前のファイルの状態に戻すことができる。
・チームで開発する場合、他人の編集内容を知らず識らずのうちに上書きしてしまうとった問題を回避できる。
リポジトリ
ファイルやディレクトリの状態を管理する場所。
リポジトリ下に置くことで変更履歴を管理できる。
リモートリポジトリは専用のサーバに配置して複数人で共有するためのもの。
ローカルリポジトリは自分のマシン上にある、一人一人が管理するもの。
コミット
コミットとは、ファイルやディレクトリの追加・変更をリポジトリに記録する操作のこと。
コミットにより、前回コミット時の状態と現在の状態の差分の記録がコミット(リビジョン)として記録される。
このコミット時にはメッセージが必要となり内容は変更内容の要約+変更した理由になる。
ワークツリーとインデックス(ステージングエリア)
Gitの管理下に置かれた、みなさんが実際に作業をしているディレクトリのことをワークツリーという。
Gitにはインデックスというものがあり、コミットを実行した時にワークツリーから直接リポジトリ内に状態を記録するのでなく、その間に設けられているインデックスの設定された状態を記録するようになっている。
基本的に以下の三つの状態になる。
1:作業ディレクトリ
↓git add
2:ステージングエリア(インデックス)
↓git commit
3:リポジトリ
初期設定
#名前、メールアドレス設定、設定確認
$ git config --global user.name "Kazuma Horikawa"
$ git config --global user.email "horikazu1397@gmail.com"
$ git config --global color.ui true
$ git config -l
git init
リポジトリを新規作成または再初期化する
$ git init
Initialized empty Git repository in /Users/×××/Desktop/test/.git/
git log
コミットのログを確認する
$ git log
commit da4××××××××××× (HEAD -> master)
Author: ×××××× <×××××@gmail.com>
Date: Sat Jun 22 10:42:34 2019 +0900
new commit
$ git log --oneline (一行でログを確認)
da45938 (HEAD -> master) new commit
$ git log -p (ログに加えてどこが変更されたかを表示)
commit da4××××××××××× (HEAD -> master)
Author: ×××××× <×××××@gmail.com>
Date: Sat Jun 22 10:42:34 2019 +0900
new commit
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..1ffa548
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+hi from test
$ git log --stat (ログに加えてどのファイルが変更されたか)
commit da4××××××××××× (HEAD -> master)
Author: ×××××× <×××××@gmail.com>
Date: Sat Jun 22 10:42:34 2019 +0900
new commit
index.html | 1 +
1 file changed, 1 insertion(+)
git status
作業ディレクトリ(add、ステージングエリアの前)で状態を確認できる。
checkout/addで編集できる。
$ git status
On branch master
nothing to commit, working tree clean
この表示はステージングエリアに何もないということ
$ vim status.html
$ git status
Untracked files:
(use "git add <file>..." to include in what will be committed)
status.html
この表示はコミットするためにはgit add
をしてくださいと言っている
git diff
作業ディレクトリ(add、ステージングエリアの前)で変更を確認できる。
$ git diff
diff --git a/index.html b/index.html
index 1ffa548..d288de7 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
hi from test
+confirm diff
addしてステージングエリアのファイルを確認する場合は、オプションで--cached
をつける
git diff --cashed
ファイルを削除・移動する場合は、
git rm/mv
とする。
.gitignore
指定したファイルをコミットしないようにする。
vimでワイルドカードを用いて編集し、
*.log
のようにすると、.log系のファイルはaddされない。
.gitignoreが適用される範囲はどうディレクトリと下位ディレクトリで、主な用途としてはセキュリティ上見られたくないものやファイルが大きくて上げる必要がないものに使われる。
$ vim test.log
$ vim .gitignore
*.log
↑により、test.logはコミットされない。
git commit --amend
直前のコミットを変更したいがlogはそのままでいい場合に使う。
コミットメッセージが開き、変更するか問われる。
git reset
addまでして前のコミットの状態にしたい時、logを指定して戻ることができる。
git reset --hard HEAD
HEADまたは直接logの値を指定できる
git reset --hard ORIG_HEAD
とすることでコミットデータが戻る
$ git reset --hard HEAD
HEAD is now at 5a6fd32 new
$ cat index.html
hi from test
confirm diff
$ git reset --hard HEAD^(HEADのもう一つ前)
HEAD is now at da45938 new commit
$ cat index.html
hi from test
$ git reset --hard ORIG_HEAD
HEAD is now at 5a6fd32 new
git branch
git branch
で現在の状況を確認できる。標準はmaster
git branch hoge
でブランチ作成
git checkout hoge
でブランチ移動
または作成・移動は
git checkout -b hoge
とする
$ git branch
* master
$ git branch hoge
$ git branch
hoge
* master
*
$ git checkout hoge
Switched to branch 'hoge'
$ git branch
* hoge
master
$ git checkout -b hogehoge
Switched to a new branch 'hogehoge'
$ git branch
hoge
* hogehoge
master
git merge
masterにブランチを同期させる。
git merge hoge
上記でいえば、hogeでの編集内容をmasterに同期することができる。
git branch -d hoge
で削除できる
$ git branch
hoge
* master
$ git checkout hoge
Switched to branch 'hoge'
$ vim hoge.html
$ git add .
$ git commit -m"commit from hoge"
[hoge a3d9e3e] from hoge
1 file changed, 1 insertion(+)
create mode 100644 hoge.html
$ git log
commit a3d××××××××(HEAD -> hoge)
Author: ×××× <×××@gmail.com>
Date: Sat Jun 22 11:04:05 2019 +0900
from hoge
commit 5a6××××××××(master)
Author: ××× <×××@gmail.com>
Date: Sat Jun 22 10:52:59 2019 +0900
cmmit from master
$ git checkout master
Switched to branch 'master'
$ git merge hoge
Updating 5a..a3e
Fast-forward
hoge.html | 1 +
1 file changed, 1 insertion(+)
create mode 100644 hoge.html
$ git log
commit a3d×××× (HEAD -> master, hoge)
Author: ××× <×××@gmail.com>
Date: Sat Jun 22 11:04:05 2019 +0900
from hoge
CONFLICT
同じファイルを違うブランチで編集してマージするとコンフリクト(衝突)が起きる
git status
で確認できる
この場合はvimでコンフリクトが起きている箇所を直接編集する。
git tag
logの値の羅列に対して名前をつけることができる。
git tag v1.0
↑直近のコミットをv1.0という名前にした。
git show v1.0
でコミット内容確認できる。
git tag -d v1.0
でタグを削除できる。
$ git tag v1.0
$ git show v1.0
commit a3d××× (HEAD -> master, tag: v1.0, hoge)
Author: ××× <×××@gmail.com>
Date: Sat Jun 22 11:04:05 2019 +0900
from hoge
diff --git a/hoge.html b/hoge.html
new file mode 100644
index 0000000..45b983b
--- /dev/null
+++ b/hoge.html
@@ -0,0 +1 @@
+hi
$ git tag -d v1.0
Deleted tag 'v1.0' (was a3d9e3e)
alias
aliasを使うことでコマンドに短縮名をつけることができる
checkoutにcoという略称をつけたい
git config --global alias.co checkout
branchにbrという略称をつけたい
git config --global alias.br branch
$ git config --global alias.st status
$ git st
On branch master
nothing to commit, working tree clean
$ git config -l(aliasの確認)
...
alias.st=status
...
共有リポジトリ
共有リポジトリをinitする場合は--bare/sharedというオプションが必要になる
git init --bare --shared
git remote add origin リモートリポジトリのパス
でリポートリポジトリを指定する。
git push origin master
で内容をプッシュすることができ、
git pull origin master
で内容をプルできる
git congig -l
でリモートリポジトリの場所やaliasを確認することができる。