git(ギット)とは? †
- バージョン管理システム
- 公式サイト: http://git-scm.com/
- 必要となる知識: Linux, vim
- 動作環境: Linuxローカル環境(CentOS 5.11 - 32bit)
gitインストール †
# yum -y update
# yum -y install git
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
Setting up Install Process
No package git available.
Nothing to do
- yum install git失敗のためEPELリポジトリをインストール
# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm
# vi /etc/yum.repos.d/epel.repo
--------------------
[epel]
...
enabled=1
priority=1
...
--------------------
# yum -y install git
# git --version
git version 1.8.2.1
バージョン管理の流れ †
- 作業ディレクトリ
- ステージングエリア(インデックス)
- リポジトリ(ローカル、リモート)
gitの設定 †
$ git config --global user.name "Yuji Shimojo"
$ git config --global user.email "yjshimojo@gmail.com"
$ git config --global color.ui true
$ git config -l
user.name=Yuji Shimojo
user.email=yjshimojo@gmail.com
color.ui=true
$ git config --help
$ git help config
リポジトリへのコミット †
$ mkdir myweb
$ cd myweb/
$ git init
Initialized empty Git repository in /home/yuji/myweb/.git/
$ vi index.html
--------------------
line 1
--------------------
$ cat index.html
line 1
- 作業ディレクトリ=>ステージングエリアへファイルをアップ
$ git add index.html
- ステージングエリア=>リポジトリへファイルをアップ
$ git commit
--------------------
initial commit // コミットメッセージ(任意)
--------------------
[master (root-commit) 12662e4] initial commit
1 file changed, 1 insertion(+)
create mode 100644 index.html
コミット履歴(ログ)の確認・オプション †
$ git log
commit 12662e4f226f299708ddb5c89274739fd355f9b8 // 一意のコミットID
Author: Yuji Shimojo <yjshimojo@gmail.com>
Date: Sun Sep 20 03:03:31 2015 +0900
initial commit // コミットメッセージ
$ git log --oneline
12662e4 initial commit
$ git log -p
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..89b24ec
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+line 1
$ git log --stat
commit 12662e4f226f299708ddb5c89274739fd355f9b8
Author: Yuji Shimojo <yjshimojo@gmail.com>
Date: Sun Sep 20 03:03:31 2015 +0900
initial commit
index.html | 1 +
1 file changed, 1 insertion(+)
状態確認 †
$ vi index.html
--------------------
line 1
line 2
--------------------
$ git status
# On branch master
# Changes not staged for commit: // ステージング未反映、未コミット
# (use "git add <file>..." to update what will be committed) // git addでステージングに反映可能
# (use "git checkout -- <file>..." to discard changes in working directory) // git checkoutで変更前の状態に戻すことが可能
#
# modified: index.html
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git checkout -- index.html
$ cat index.html
line 1
差分確認 †
$ git diff
diff --git a/index.html b/index.html
index 89b24ec..7bba8c8 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
line 1
+line 2
$ git add index.html // ステージングエリアへ追加
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
$ git diff --cached
diff --git a/index.html b/index.html
index 89b24ec..7bba8c8 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
line 1
+line 2
gitでのファイル操作 †
$ git add [filename1] [filename2] [filename3] ...
- カレントディレクトリ配下のファイルを全てステージングエリアへ追加
$ git add .
- ファイルの削除・移動 ※addやcommit済みのファイルはgitコマンドを使用
$ git rm index.html
$ git mv file1 file2
git管理からの除外設定 †
$ ls
error.log index.html
- .gitignoreファイルを作成しgit管理から除外するファイルを指定 ※当該ファイルが配置されたカレントディレクトリ&配下に適用
$ vi .giignore
--------------------
*.log
--------------------
直前のコミットを変更 †
$ git commit -m "ライン2を追加"
[master 51e7ce3] ライン2を追加
1 file changed, 1 insertion(+)
- 直前のコミットを変更 ※変更のため新たにコミット履歴(コミットID)が追加されない
$ git commit --amend
過去のバージョンに戻る †
- git add済み後にステージングエリア・作業ディレクトリ共に直前のバージョンに戻す
$ git reset --hard HEAD
$ git reset --hard HEAD^
- コミットIDを指定して過去バージョンに戻す ※IDは完全一致でなくても一意に特定可能な桁数であればOK(最低7桁)
$ git reset --hard 12662e4f226f
- git resetで過去バージョンに一旦戻したがその操作をやり直したい(リドゥしたい)場合
$ git reset --hard ORIG_HEAD
- ORIG_HEADには前回取り消されたHEADの情報が1つだけ保存
ブランチを活用 †
- ブランチは分岐の意で別々のバージョンを並行して開発したい場合に利用
- ブランチ一覧表示(*は現在使用中のブランチ)
$ git branch
$ git branch hoge
$ git checkout hoge
Switched to branch 'hoge'
ブランチをマージ †
$ git branch
hoge
* master
- masterブランチにhogeブランチの変更内容をマージ
$ git merge hoge
Updating 556ff5f..054edfd
Fast-forward
myscript.js | 1 +
1 file changed, 1 insertion(+)
create mode 100644 myscript.js
$ git branch -d hoge
Deleted branch hoge (was 054edfd).