サイズ: 2075
コメント:
|
サイズ: 6894
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 99: | 行 99: |
== branch == * 最初はmasterというbranchが作られる。 === masterとtopic branch === * masterからtopic branchをを作成。 * topic branchでの変更が終わったら、masterへmerge。 === head === * 現在使用している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 === * in Japanese : http://keijinsonyaban.blogspot.jp/2010/10/successful-git-branching-model.html * in English : http://nvie.com/posts/a-successful-git-branching-model/ === create branch === {{{ git branch <branchname> }}} === list branch === {{{ git branch }}} === checkout branch === * branchの切替 {{{ git checkout <branch> }}} === 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も戻す。 == edit commit == === commit --amend === * 直前のcommitを編集する。 === cherry-pick === * 別のbranchから指定したcommitを現在のbranchに取り込む。 === rebase -i === * 過去のcommitの入れ替え、統合、削除、書き換え。 === squash === * mergeのオプション。 * あるbranchのcommitすべてをまとめてひとつのcommitにして現在のbranchにmerge |
なにこれ
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 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>
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。
head
- 現在使用している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
in Japanese : http://keijinsonyaban.blogspot.jp/2010/10/successful-git-branching-model.html
in English : http://nvie.com/posts/a-successful-git-branching-model/
create branch
git branch <branchname>
list branch
git branch
checkout branch
- branchの切替
git checkout <branch>
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も戻す。
edit commit
commit --amend
- 直前のcommitを編集する。
cherry-pick
- 別のbranchから指定したcommitを現在のbranchに取り込む。
rebase -i
- 過去のcommitの入れ替え、統合、削除、書き換え。
squash
- mergeのオプション。
- あるbranchのcommitすべてをまとめてひとつのcommitにして現在のbranchにmerge