Gitの使い方まとめ
かなりの今さら感がある記事。
Gitを後輩が使っていて質問されたことを中心に基本的な概念や使い方をつらつらと書いていこうと思う。
普通ならコミット、プッシュを最初に説明していくかもしれないけど、この記事ではGitの概念であるブランチを先に説明して、その後にCommit, Pushあと、ちょっとしたTipsとも言えないけどstashを説明し、終わる。
さて、Gitではサブバージョンと違ってブランチをどんどん切っていくことが需要となる。
開発の流れとしては
1.ブランチを切って、
2.作業を進めていき、
3.本流に統合する。(たいていはMasterという名前。便宜上、本流はMasterと今後呼ぶ)
という流れで開発を行う。
HEADとは現在指しているブランチのこと。最初であればmasterである。
新しく切るブランチのコマンドは
$ git branch iss53
となる。ブランチを作成した後はそのブランチへ乗り換える。(そのブランチへ移動)
$ git checkout iss53
この作業は実に多いため、ショートカットが用意されている。
$ git checkout -b iss53
SubversionのCheckoutは忘れて欲しい。GitでいうCheckoutはブランチ間の移動を指す。
チェックアウト実行により、HEADが移動する。
どこのGitかはcat .git/HEADを行うことで取得することができる。
ブランチを切った後、修正内容をMasterへ反映したい場合は
・masterブランチへ戻る。
・masterブランチを先ほどいたブランチの場所まで進める
を行う。ブランチに戻る(つまり移動する)には、先程のgit checkoutコマンドを使う。
masterブランチにいるときに、
$ git merge iss53
これでマージが完了する。
今はiss53とmasterが同じ場所にいることになっている。だからもうブランチはイラナイ。そこでブランチを消す。
$ git branch -d iss53
基本的には以上の流れ。
もし、Automatic merge failed; が出た場合、マージに失敗している。その時はどこで失敗しているのかGit statusで見ることができる。
衝突が発生している場合、unmergedでる。
そして、そのファイルにコンフリクトマーカーが挿入されている。
(<<<<<<< や ======= そして >>>>>>>)
これらを全て消し、どちらかが正しいのかを選択する。
全てが解決したら衝突していたファイルをgit addをする。
git statusを踏むことで、先程のUnmergedがModifiedに変更されているのが解る。
現在のブランチの一覧を見るには
$ git branch
をする。-vをつけるとハッシュキーも見える。
実際にGitサーバーを使って実際にコミットしてみる
Gitを使うにはサーバー(リポジトリ)を設置する必要がある。
・Githubサーバーを使う
・Bitbucketサーバーを使う
・自前でサーバーを作る。
この3つがある。今の時代、自分でサーバーを立てるなんてアホなことはやめる。
素直にGithubかBitbucketを使おう。
リポジトリを公開してもいい場合はGithubサーバーでアカウントを作成する。
もし、非公開のリポジトリを作りたい場合はbitbucketをおすすめする。
Githubでも非公開のリポジトリは作れるが有料である。
お弁当のマイ食ではエレガントなソースコードはもちろん社外秘なので、Bitbucketを使っている。
これはタダで運用できている。
リポジトリのコピー
$ git clone git@github.com:todoroki/gittest.git
これで終わり。。なんて楽なんだ。
さてファイルを作成して、それをコミットする。
$ git add your_edit_or_create_file.txt
$ git commit -m "Yes, I added or created this file."
これを繰り返し、ローカルにガンガンコミットする。あとはサーバーに上げるタイミングで
サーバーへアップロード
$ git push origin master
サーバーからのダウンロード
$ git push origin master
殆どこれで足りる。
ちょっと調子に乗ってきたら stash
ブランチを移動するときは編集ファイルがある場合、コミットしないと移動できない。もしくはstashをする。
stashはコミットはしない、一時ファイルの保存、スナップショットの作成と言う感じ。
# itanoブランチへ移動 & 編集 & add & commit
$ git checkout itano
$ echo "She got cosmetic surgery!!" >> roba_no_mimi.txt
$ git add roba_no_mimi.txt
$ git commit -m "secrete stuff is added."
ここで再度修正を加え変更しようとするとエラーが生じる
$ echo "Fix her nose!" >> roba_no_mimi.txt
$ git checkout master
ここでエラー出る。つまりコミットしていないから。素直にコミットをしてもいいが、ちょっとMasterブランチの様子を除くだけのためにコミットはメンドイ。そういうときは
こういう時はstashで一時保存してブランチへ移動できる。
$ git stash
$ git checkout master
再び戻る
$ git checkout itano
$ git stash pop
株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house