Git

再入門のためのGitまとめ

More than 5 years have passed since last update.


やっておくと捗る設定


ユーザー情報を設定

git config --global user.name "Hanako Yamada"

git config --global user.email "username@example.com"


--no-ff フラグをデフォルトにする

--no-ffフラグは常にNone Fast fowardなマージを強制します。

git config --global merge.ff false


引数無しのgit pushを現在のブランチのみに限定する

git config --global push.default simple


UTF-8問題解決設定

git config --global core.precomposeunicode true


色付け

git config --global color.ui auto

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto


git diffの出力をページャ対応にする

git config --global core.pager "lv -c"


主要コマンド


ローカルリポジトリの作成

git init


git-flowで初期化するなら

git flow init -d



共有リポジトリの作成

git init --bare example.git


変更されたファイルの一覧を表示

git status -s -b


変更の確認(add前)

git diff


変更したファイルを追加

git add ファイル名


新規作成されたファイルを全て追加

git add -A


変更/削除されたファイル(新規作成除く)を追加

git add -u


変更の確認(コミット前)

git diff --staged

または

git diff --cached


コミット

git commit -m "コメント"


変更の確認(コミット後)

git show

または

git diff HEAD


直前のコミットを取り消す

git reset


コミットにタグを付ける

git tag <タグ名>


リポートリポジトリの登録

git remote add origin リポジトリ


リモートへpush


初回

git push -u origin master



(同じブランチなら)2回目から

git push



現在の状態を元にブランチを作成し移動

git checkout -b new-branch


現在のブランチを表示

git branch


ブランチ切り替え

git checkout new-branch


現在の作業中の状態をコミットせずに一時的に保管する

git stash <保存名もしくはコメントなど>


stashで保存した作業ツリーに戻る

git stash pop


すでに版管理対象になっているものを管理から外す

git rm -r --cached hoge


ブランチの変更をマージ

git checkout master

git merge topic/hoge


現在のブランチの状態を、派生元のブランチの最新の状態から派生するよう変更する

※共有ブランチをrebaseするとpushできなくなるので気をつける

git rebase <派生元ブランチ>


リモートの状態をローカルに反映

git pull


rebaseしてpull

git pull --rebase


リモートの状態をローカルに保存(マージはしない)

git fetch


リモートリポジトリをローカルにコピー

git clone ssh://[ユーザー名@]<ホスト名>[:ポート番号]/<Gitリポジトリのパス>


変更履歴を参照

git log


Git-flow


初期化

git flow init -d


メインブランチ


masterブランチとdevelopブランチ


  • origin/master は、製品として出荷可能な状態を常に反映する

  • origin/develop は、次のリリースのための最新の開発作業の変更を常に反映する

  • develop ブランチのソースコードが安定し、リリースの準備ができたとき、 develop ブランチの全ての変更は master ブランチへマージされ、リリース番号をタグ付けされる

  • master へ変更がマージされる時はいつも、その定義からして新しい製品がリリースされる時


サポートブランチ


フィーチャーブランチ(トピックブランチ)


  • 将来のリリースに入るような新しい機能を開発するのに使われる。

  • develop ブランチから分岐する。

git flow feature start myfeat


  • 確実に今度のリリースに追加する、開発済みの機能は、develop ブランチにマージされる

  • フィーチャーブランチは典型的には開発者のリポジトリにだけ存在し、 origin には存在しない。

git flow feature finish myfeat


リリースブランチ


  • リリースブランチは develop ブランチから作成される。

  • リリース直前のマイナーなバグフィクスや、リリースのためのメタデータ(バージョン番号、ビルド日時、他)の準備を行う

git flow release start v1.0


  • リリースが終わった後、develop と masterにマージし、リリースブランチは削除される。

git flow release finish v1.0


ホットフィックスブランチ


  • ホットフィックスブランチは master ブランチから作成される。

  • 製品バージョンにあるクリティカルなバグがすぐに解決されなければならないとき、作成される。

git flow hotfix start v1.0.1


  • バグを修正し、develop と master にマージした後、削除される。

  • ※リリースブランチが存在していたら、develop の代わりにリリースブランチにマージする

git flow hotfix finish v1.0.1


Github Flow

Git Flow を簡略化し、Pull Requestによるコードレビューを取り入れたもの。


  • developブランチは作成しない。

  • 全てのブランチはmasterブランチから作成し、masterブランチへマージされる。

  • 作業用のブランチは定期的にリモートへプッシュする。

  • GitHubのプルリクエストの機能を利用して、ソースコードのレビューを行った後、masterブランチにマージする。

  • マージされたmasterブランチのコードは、すぐにデプロイする。


pull requestする際のベストプラクティス

GitHubへpull requestする際のベストプラクティス - hnwの日記


フックの設定


pushしたら自動デプロイ


リモートリポジトリ/.git/hook/post-updete

cd /var/www/app_production && /usr/bin/git --git-dir=.git fetch && /usr/bin/git --git-dir=.git merge origin



GUI


SourceTree

Free Mercurial and Git Client for Windows and Mac | Atlassian SourceTree


学習ツール

Learn Git Branching


リポジトリホスティングサービス


GitHub

GitHub


  • 公開リポジトリ無料/無制限

  • Privateリポジトリは有料(5個/月7ドル 〜 50個/月50ドル)


Bitbucket

Bitbucket


  • 公開リポジトリ無料/無制限

  • Privateリポジトリ無料/無制限

  • 5ユーザまで無料

  • 日本語対応


参考URL

見えないチカラ: A successful Git branching model を翻訳しました

見えないチカラ: 【翻訳】あなたの知らないGit Tips

Gitブランチを使いこなすgit-flow/GitHub Flow入門(1):いまさら聞けない、成功するブランチモデルとgit-flowの基礎知識 (1/2) - @IT

github を用いた開発フロー テンプレート

gitのpush.defaultに関するノウハウ - Qiita

Linux - Gitをインストールしたら真っ先にやっておくべき初期設定 - Qiita

Gitを使いこなすための20のコマンド | SourceForge.JP Magazine

チーム開発に必要なgit コマンドを神速で習得しよう! - 酒と泪とRubyとRailsと

逆引きGit | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

git - fetch と pullの違い - Qiita