過去にSVNから移行した際のアウトプット/メモ。変な個所がありましたら、ご指摘いただけますと幸いです
Gitとは。
分散型バージョン管理システム。ブロックを色んなところで組み立てて、タワーに積み上げるイメージ。
対比として、中央集権型バージョン管理システムのSVNが挙げられる。
まずは大まかなイメージ図
登場するのは大きく分けてこの3つ。
・作業ブランチ
・リモート追跡ブランチ
・リモートブランチ
作業ブランチとリモート追跡ブランチを合わせた領域がローカルブランチ。
作業ブランチ
メンバー各々が開発を進めていく個人スペースで、機能毎に作業ブランチを作成してコーディングし、リモートブランチにpushしていく。別名だと追跡ブランチ(tracking branch)。
リモート追跡ブランチ
作業ブランチとリモートブランチの間に存在するブランチ。(上図参照)
作業ブランチとリモートブランチは直接のやり取りはせず、リモート追跡ブランチを介してやり取りをする。
git fetch
した時に更新される。少しややこしい。
リモートブランチ
みんなで共有しているブランチ。git push
しない限り変更されない。
逆に言うと、リモートブランチにpushするとみんなに影響出ちゃう可能性があるので注意。
既存リポジトリのclone
$ git clone [url]
これだけ。
実務フロー
エディター上でも操作は可能だが、コマンドラインでの操作方法を記述
案件で機能追加が発生した場合
①作業ブランチを作成
↓
②リモートブランチにpush
↓
③masterブランチへmerge
①作業ブランチを作成
作業ブランチ作成。
※この時に最新のmasterから生やすように注意!
$ git branch ブランチ名
参照するブランチを切替
$ git checkout ブランチ名
Switched to branch 'hoge_branch'
ブランチ一覧&参照ブランチ確認
$ git branch -a
* hoge_branch 現在参照されているブランチ
master ローカルのmasterブランチ
remotes/origin/master リモート追跡ブランチのmasterブランチ
②リモートブランチにpush
開発が一段落したらソースをステージしてcommitしてpushする。(パルスのファルシのルシがパージでコクーン感)
ステージとは、commit予定のファイル一覧リスト,もしくは追加すること。このリストをHEADにcommitする。この時点では、リモートブランチに影響は出ない、言い換えるとローカル内でリモートに反映する準備をしただけ。SVN利用者は勘違いしやすい。
一応、差分が無いかstatusを確認する。差分が無ければ次へ。
$ git status
ソースをステージする。(索引に追加)
$ git add ファイル1 ファイル2 ...
~その他~
$ git add . //すべてのファイル・ディレクトリ
$ git add *.css //すべてのCSSファイル
$ git add -n //追加されるファイルを調べる
$ git add -u //変更されたファイルを追加する
HEADにcommitする。
$ git commit
もしくは
$ git commit -a -m "任意のコメント" //コミット (-aオプションは変更を自動検出してくれる
リモートブランチにpush。(ここで外部に更新内容が反映される)
$ git push origin ブランチ名
その他コマンド
・HEADにcommitしたのを取り消したい
$ git reset --soft HEAD~2 #最新のコミットから2件分をワークディレクトリの内容を保持し取り消す
$ git reset --hard HEAD~2 #最新のコミットから2件分のワークディレクトリの内容とコミットを取り消す
追記
$ git reset --soft @~ #これでもいける。HEADと@は同じ意味
・commitメッセージを修正したい
$ git log
編集...
完了。
$ git commit --amend
複数修正したい場合
$ git rebase -i HEAD~2 #HEADから2件のコミットメッセージを表示
Viエディタ起動
pick commitId メッセージ // 2件目
pick commitId メッセージ // 1件目(最新)
.
.
.
上記の「pick」を「edit」に書き換えて保存してrebaseする。rebase危ないので用法用量を守って正しくお使いください。
$ git rebase --continue
③masterブランチへmerge
ローカルmasterブランチとリモートmasterブランチの差分を確認
$ git checkout master
$ git status
今度は機能追加で作成した作業ブランチとローカルmasterブランチの差分を確認。
$ git diff --name-status master hoge_branch
差分があったら、取り込む。
$ git fetch #リモートの更新内容を取得
$ git merge origin/master #取得した更新内容をローカルに反映
ローカルmasterブランチへ作業ブランチの内容を取り込む。
$ git merge master hoge_branch
リモートmasterブランチにpush
$ git push origin master:master
不要になったブランチ削除
機能毎にブランチをたくさん作成するので、こまめに消そうね。
作業ブランチ削除
$ git branch --delete ブランチ名
リモートブランチ削除
$ git push --delete origin foo
もしくは
$ git push origin :foo
参照
Subversionを使用し続けているプロジェクトがGitに移行することを考えてみた
【Git】基本コマンド
Gitコマンド一覧
Git 基本の用語集
git rebase についてまとめてみた
Git で不要になったローカルブランチ・リモートブランチを削除する方法