midore / reading-git-book

入門gitをよみながらメモをつける

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Git 入門書をよみながら

p.42-p.55
% mkdir reading-git-book
% cd reading-git-book
% git init
% touch README
% vim REAME
% git add .
% git commit -m 'first commit'

# add 前に何が add されるかみる。
% git diff
# add した後、commit 前に何が commit されるかみる。
% git diff HEAD

# 全てのファイルの変更を add する。
% git add -u

# 状態確認。もしも README が編集されていたら
% git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   README
と表示される。

何も変更されていなければ
% git status
# On branch master
nothing to commit (working directory clean)

# index に登録したくないファイル名を登録
% vim .gitignore
% git add .gitignore

# 一気に全てのファイルを add しコミットする
% git commit -a -m 'All files commit'

# ログをみる
% git log -p

See: http://learn.github.com/p/intro.html

# ------------------------------ .git/config の状態
# ローカル内で git init しただけの場合のリモート先には
# [remote] は存在していない。[core] があるだけ。
# http://help.github.com/remotes/ のリモート先設定方法を閲覧しながら試す。

# 今作った reading-git-book のリモート先を
# github.com/midore/reading-git-book.git に設定してみる。
% more .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true

% git remote add reading-git-book git://github.com/midore/reading-git-book.git
% more .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "reading-git-book"]
        url = git://github.com/midore/reading-git-book.git
        fetch = +refs/heads/*:refs/remotes/reading-git-book/*

# try
% git push git@github.com:midore/reading-git-book.git master
ERROR: midore/reading-git-book doesn't exist yet. Did you enter it correctly?
fatal: The remote end hung up unexpectedly

# ブラウザでgithub.com にログインし reading-git-book プロジェクトを作成する必要があった。
# 新しい reading-git-book プロジェクトを作ったらブラウザに指示書が表示された。
# git init, git add , git commit はすませてあるので
% git remote add origin git@github.com:midore/reading-git-book.git
% git push origin master

# 無事に git push origin master は成功した。
# 今の readingbook-git-book/.git/config 状態

% more .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "reading-git-book"]
        url = git://github.com/midore/reading-git-book.git
        fetch = +refs/heads/*:refs/remotes/reading-git-book/*
[remote "origin"]
        url = git@github.com:midore/reading-git-book.git
        fetch = +refs/heads/*:refs/remotes/origin/*

# どうやら [remote "reading-git-book"] の部分は今の私には必要なかったようだ。
% git remote --help
% git remote rm reading-git-book
% more .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@github.com:midore/reading-git-book.git
        fetch = +refs/heads/*:refs/remotes/origin/*

# p.210 を先読み
% git remote
origin

# ------------------------------ ssh-agent
# git push したあと後始末することを忘れがち。
% ps aux | grep ssh
% kill ssh-agent's pid


# ------------------------------ 部分変更重要
p.56
# 一枚のファイルの中の複数の変更箇所を分割してコミットできる
% git add -p filename

hunk が分かれていなかった場合はs を選択するとより細かく hunk が分割される。
y で選択し n で次、q で終了
% git add -p してすぐにリターンするとヘルプをみることができる。

% git diff --cached  
でコミット内容を確認
% git commit -v
で詳細内容をみながらコメント文を作成する

# ------------------------------ コミットする前にコミット内容の確認
p.59
# これからコミットする内容を確認できる
% git diff --cached

# Editor が起動する。これから何をコミットするかが一目瞭然なのでコメントを書きやすい。とても便利
% git commit -v

# コミットした内容を確認する。最新の一つ
% git show

% 特定のファイルだけをコミットしたい時はそのファイルをadd した後にファイル名を指定してcommit できる。
% git commit -m 'added ignore file' .gitignore

% git add -A 
で全てのファイルをindex にadd したとしてその後、特定のファイルだけを次回コミットから外したい時は
% git reset tmpfile

# ------------------------------ ログ検索
p.68
# ログの要約だけを表示
% git log --pretty=short

# ファイル名で探す
% git log --pretty=short index.html

# keyword で探す
% git log --pretty=short --grep='Hello'
# or 検索
% git log --pretty=short --grep='Hello' --grep='log'
# and 検索
% git log --pretty=short --all-match --grep='Hello' --grep='log'
# その他
% git log --author='author name'

# この行はどのコミットに所属しているのかを一行ずつ表示してくれる。
% git blame README

# ------------------------------ 変更取り消し
p.71
% git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   README

% git revert 39d9f92c
error: Your local changes to 'README' would be overwritten by merge.  Aborting.
Please, commit your changes or stash them before you can merge.

ファイルを編集した直後に % git revert 39d9f92c
するとエラーになる。
% git add -u
% git revert 39d9f92c
fatal: Dirty index: cannot revert

add しただけでコミットしていないとエラーになる。

# ------------------------------ 直前のコミットをなかったことにする
p.72
% git reset HEAD^

# ------------------------------ 直前のコミット文章を書き直す
p.74
% git add filename
% git commit -m '間違ったコメント'
% git commit --amend

# ------------------------------ 3つ前以降のコミットを書き換える
p.75
% git rebase -i HEAD~3
変更したいコミット行を、pick からedit にし保存しエディタを終了する。

file を編集してよい。

% git commit --amend -a
[detached HEAD 3670cae] TEST 1
 1 files changed, 2 insertions(+), 1 deletions(-)
% git rebase --continue
Successfully rebased and updated refs/heads/master.

3つ前のコミット内容に今しがた編集した内容が反映されているようになる。

# ------------------------------ 2カ所で使う
p.78
mkdir /pub/repository/reading-git-book
cd /pub/repository/reading-git-book
git --bare init


試してみたこと
mkdir backup-mdiary
cd backup-mdiary
git clone /path/to/mdiary .

% more .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = /path/to/mdiary/
[branch "master"]
        remote = origin
        merge = refs/heads/master


About

入門gitをよみながらメモをつける