ログイン
編集不可のページディスカッション情報添付ファイル
"alstamber/git"の差分

MMA
3と4のリビジョン間の差分
2012-09-04 23:04:30時点のリビジョン3
サイズ: 6894
編集者: alstamber
コメント:
2012-09-04 23:14:08時点のリビジョン4
サイズ: 7654
編集者: alstamber
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 45: 行 45:
=== check differences of file ===
{{{
git diff <filename>
}}}
行 73: 行 77:
}}}

=== commit all file edited ===
 * git addする必要なし。
{{{
git commit -a
行 139: 行 149:
=== create branch and checkout branch ===
 * branchつくって切替を同時にやる。
{{{
git checkout -b <branchname>
}}}
行 217: 行 232:
=== reset commit ===
 * 一つ前のcommitをsoftモードで消す。
  * HEAD^はHEADの一つ前という意味。
{{{
git reset --soft HEAD^
}}}
 * 消したcommitはORIG_HEADという名前で参照可能だから
{{{
git diff ORIG_HEAD
}}}
とすれば差分を閲覧できる。
行 228: 行 254:
=== amendを使う ===
{{{
git commit(あっ間違えた!)
(間違いを修正)
git commit --amend
}}}

== other ==
=== garbage correction ===
{{{
git gc
}}}

なにこれ

gitを運用する上での知識の整理。

initial settings

git config --global user.name "<username>"
git config --global user.email "<mail address>"

create

create new repository

git init

create new public repository

  • 慣例としてディレクトリ名に.gitをつける。
  • --bareをつけると、bare repositoryになる。bare repositoryは管理情報のみを持つ。
    • commitなどができない。

git --bare init

clone

clone local repository

  • 既存のlocal repositoryを複製する。

git clone /path/to/repository

clone remote repository

  • 既存のremote repositoryを複製する。

git clone username@host:/path/to/repository

check

check status

  • working directoryとindexの状態を確認する。

git status

check differences of file

git diff <filename>

check repository log

  • repositoryの変更履歴を確認する。

git log

add/remove

add files

  • indexにaddする。

git add <filename>
  • すべてをaddする。

git add *

remove files

  • indexからremoveする。

git rm <filename>

commit

commit

git commit -m <message>

commit all file edited

  • git addする必要なし。

git commit -a

push/pull

add remote repository

  • push/pullするためにremote repositoryを予め登録しておく。

git remote add <name> <url>
  • 通例次のように使う。
    • push/pullでrepository名を省略するとoriginという名前につなぎに行こうとするので。

git remote add origin <remote repository url>

push

  • <repository>に<branch>をpushする。

  • cloneして生成したrepositoryではgit pushだけでgit push origin masterと同じ事になる。

git push <repository> <branch>...

pull

  • <repository>をとってきて<branch>にmergeする。

git pull <repository> <branch>

branch

  • 最初はmasterというbranchが作られる。

masterとtopic branch

  • masterからtopic branchをを作成。
  • topic branchでの変更が終わったら、masterへmerge。

  • 現在使用しているbranchの先頭。
    • デフォではmasterの先頭。

stash

  • branchに対して何らかの変更を行った状態でbranchを切り替えると、その変更は切替先のbranchに引き継がれる。
  • 同じファイルが切替先のbranchで既に変更されているとconflictしてしまう。
  • 切替元branchにcommitしてから切り替えるか、一時的にstashと呼ばれる領域に変更を退避する。

merge

  • branchを統合する事を考える。
  • branch Aからbranch Bが分岐し、branch Bに変更を行った後branch Aとbranch Bをmergeすることを考える。
  • branch Aに何の変更も行われていなければ、branch Aの先頭をhead(=branch Bの先頭)にするだけでmerge完了。
    • fast-forward mergeという。
  • branch Aに変更が行われている場合は、両方の変更を取り込んだ新しいcommitを作成する。
    • headは新しいcommitに移動する。

rebase

  • branch Aからbranch Bが分岐し、branch Bに変更を行った状態を考える。
  • この状態でrebaseするとbranch Aの後ろにbranch Bの変更が付け足される。
  • branch Aはそのままなので、branch Aの先頭をheadに移動するにはmergeを行えば良い。

A successful git branching model

create branch

git branch <branchname>

list branch

git branch

checkout branch

  • branchの切替

git checkout <branch>

create branch and checkout branch

  • branchつくって切替を同時にやる。

git checkout -b <branchname>

merge branch

  • <commit>という名前のbranchがheadの指しているbranchにmergeされる。

git merge <commit>

delete branch

git branch -d <branchname>

correct conflict

  • conflictによってmergeに失敗した時はどうするか。
  • conflict箇所を修正してからcommitすればよい。

rebase branch

  • <branch>にたいしてrebase。

git rebase <branch>
  • conflictによって失敗した場合は該当箇所を修正し、

git rebase --continue

show differences between two branches

git diff <source_branch> <target_branch>

pullとmerge

  • pullはremoteから内容をとってきて、mergeするという作業をしているだけ。
  • 内容を取ってくるためのコマンドとしてfetchというものがあるので、内部的にはfetch→mergeしてるだけ。
  • pullの際のmergeの挙動とは?

local repositoryのbranchに何も変更を加えていない時

  • fast-forward mergeされるだけ。

local repositoryのbranchに変更をくわえている場合

  • 頑張ってmergeする。conflictする場合は知らせてくれるので、修正してcommit。

fetch

  • 前項で触れたが、remoteから内容を取ってくるだけのコマンドとしてfetchが存在する。
  • fetchでとってきた内容はFETCH_HEADという名前でcheckoutして参照可能。

tag

  • commitに名前をつける。

軽量タグと注釈付きタグ

  • 軽量タグは名前だけ付けられる。
  • 注釈付きタグは名前とコメント、署名を付けられる。
  • 軽量タグは使い捨て、注釈付きタグはリリースの際につけるフォーマルなもの。

add lightweight tag

  • headにlightweight tagをつける。

git tag <tagname>

add annotated tag

  • headにannotated tagをつける。

git tag -a <tagname>
  • commentをつける時は-mオプション。

list tag

git tag

delete tag

git tag -d <tagname>

correct commit

revert

  • 直前のcommitを帳消しにするcommitを新たに作る。

reset

  • commitを消す。
  • modeが3つある。
    • softではheadの位置だけを戻す。
    • mixedでは加えてindexも戻す。
    • hardではworking directoryも戻す。

reset commit

  • 一つ前のcommitをsoftモードで消す。
    • HEAD^はHEADの一つ前という意味。

git reset --soft HEAD^
  • 消したcommitはORIG_HEADという名前で参照可能だから

git diff ORIG_HEAD

とすれば差分を閲覧できる。

edit commit

commit --amend

  • 直前のcommitを編集する。

cherry-pick

  • 別のbranchから指定したcommitを現在のbranchに取り込む。

rebase -i

  • 過去のcommitの入れ替え、統合、削除、書き換え。

squash

  • mergeのオプション。
  • あるbranchのcommitすべてをまとめてひとつのcommitにして現在のbranchにmerge

amendを使う

git commit(あっ間違えた!)
(間違いを修正)
git commit --amend

other

garbage correction

git gc

alstamber/git (最終更新日時 2012-09-07 22:43:21 更新者 alstamber)