github利用時の流れ
なんか、一つのことをするのに、いくつもコマンド叩かなきゃいけないgithubのキチガイっぷりにイライラしつつ、使っていかなきゃいけない以上は、いくつも叩くコマンドの意味をちゃんと理解しないといけないなーなんて思うので、よくわからないけど現状理解している部分だけでもメモっておく。
最初にやること
- git init
- カレントディレクトリに、gitの設定フォルダ .git を作って、初期ファイルを設置する
- git add .
- カレントディレクトリ以下にあるファイルをgitの対象にする。 . の代わりにファイル名を指定すればそのファイルが対象になる。これ以降に新規ファイルを作成しても、それはcommitの対象にならないので、ちゃんと git add filename をやる必要がある。
- git commit -m "comment"
- 現在の変更状態をコミットする。コミットとか海の向こうの言葉で言われてもよくわからないけど、どうも「サーバーへ送る箱にファイルをコピーする」というイメージっぽい。
- git remote add origin git@github.com:username/Reponame.git
- コミットしたファイルの送り先リポジトリを"origin"として登録する。これ以降、origin と指定すれば、 "git@github.com:username/Reponame.git"にファイルを送ってくれる。どの解説サイトでも順序的にこの位置なので、今までの流れが影響してるのかと思ったら、要はalias張っているようなものなので、initのあとならいつでもいいんじゃないだろうか。ただ、リポジトリへのaliasを複数作れるというのがよくわからない。一つのプロジェクトを複数のレポジトリに送ったりするのだろうか。
更新したら
- git add filename
- 更新したり、新規ファイルを作成したら、ちゃんとgitのindexに登録する必要がある。indexから削除する方法は未だにわからない。git rm したらファイルごと消えた。
- git commit -a -m "comment"
- 修正されたファイルを送信箱にコピーするおまじない。本来なら、修正されたファイルをgit add filenameしなければいけないのだが、 -a オプションを付けることで、自動的に更新を検出し、addしてくれる。
最後にやること
- git push -u origin master
- "origin" の "master"というブランチにcommitしたファイル群を送信する。-uの意味は未だに不明
その他
- git remote
- git remote add に追加したaliasを確認できる。
- git status
- 今のgitの状態を確認できる。カレントディレクトリに、addされてないファイルや変更されてるのにcommitされてないファイルがあると警告してくれる。何も情報がないときは、サーバー側と同期がとれていると考えていいのかも。
- git pull origin master
- まだ使ってないのでよくわからないけど、サーバーに上がってるものをダウンロードして上書きするイメージ。正確には、差分をマージする。
- git rm -r .
- よくわかんないけど、なんかローカルのファイルが消されたので rm -rf / くらいの破壊力のある魔法だと思う。 git add の逆だと思って、git rm . とかやったら -r つけろとか言われて…気がついたらファイルがなくなってた。まるで詐欺だよ!
- git rm --cached filename
- 指定したファイルをindex(git対象)から削除する。ファイルは残る。
- git diff
- commit前の段階で、差分表示
- git reset HEAD
- 現在の最新commitの状態に戻す(最後に git commit した状態)
- git remote -v
- 参照してるリポジトリ?のリスト?
- git remote set-url origin git@github.com:
/ .git - originでのpush先を変える
Branch
- git branch
- ブランチ確認
- git checkout -b <ブランチ名>
- ブランチを新規作成する
- git checkout <ブランチ名>
- ブランチを切り替える
- git merge <ブランチ名>
- 今のブランチと指定したブランチをマージする。コンフリクトするとその部分にコンフリクト情報が記述されるので、手動で修正する必要がある。コンフリクトしたファイルがバイナリファイルだと、どうやら今のブランチのファイルが残るらしい。
- git checkout --theirs <ファイル名>
- バイナリファイルがコンフリクトした際、基本てkに今のブランチのファイルが残ってしまうので、別のブランチのファイルの状態にしたい場合に打つ。
Branch使用例
とりあえずmasterで作業を進めてきたけど、ちょっと前の段階で別の手を打ってたらどうなるか確認して、そのほうが良かったらマージするまでの流れ
- 普通に作業を進め、git commitしておく。
- ブランチを作る(git checkout -b
) - resetする (git reset --hard
) - 別手法を実装する。
- commitする(git add. / git commit -m "
") - ブランチ切り替える(git checkout master)
- マージする(git merge
) - コンフリクトを調整