!!!Git *以下の本からメモ {{amazon 427406767X}} *Git インストール *Git チュートリアル *Git Eclipse プラグイン *http://typea.info/blg/glob/git/ *https://www.backlog.jp/git-guide/ *http://qiita.com/satoshi1335/items/ead109412430a078feaa !!!設定 *https://note.nkmk.me/git-config-setting/ ,種類,範囲,場所 ,system,システム全体,/etc/gitconfig ,global,該当ユーザー全リポジトリ,~/.gitconfig ,local,該当リポジトリ,[repository]/.git/config !!確認 !基本 $git config --global --list user.email=pppiroto@gmail.com user.name=piroto !ユーザーインターフェースの色 $git config --global color.ui "auto" !!設定 $git config --global user.name "Hiroto Yagi" $git config --global user.email "pppiroto@gmail.com" !!編集 $git config --global --edit !!ヘルプ $git help $git help コマンド !!!GUI !!gitk *[Cygwinでgitkが使えないときの対策メモ|http://futurismo.biz/archives/824] *gitk はグラフィカルな履歴ビューア。 git log や git grep をパワフルなGUIシェルから使えるようにしたようなもの。 過去に何が起こったかを検索したり、プロジェクトの歴史を視覚化しようとしているときに使う。 *--all : HEADだけではなく 任意の 参照から到達可能なコミットを表示させる **各ドットはコミットを、線は親子関係を表す $ gitk [git logのオプション] {{ref_image gitk.jpg}} !!git-gui *git-gui は主にコミットを作成するためのツール *左側はインデックスです。ステージされていない変更が上に、ステージされた変更が下に表示 *右上に表示されているのは diff **この領域を右クリックすることで、個々のhunk(または個々の行)をステージング *右下はメッセージとアクションの領域です。テキストボックスにメッセージを入力し、 “Commit” をクリックすれば、 git commit と同じようなことができます *“Amend” ラジオボタンを選択すると、 “Staged Changes” 領域に最後のコミットの内容が表示されるので、そのコミットを修正することもできます。 変更をステージしたり、ステージを取り消したり、コミットメッセージを変更したりしたら、 “Commit” を再度クリックすれば古いコミットが新しい内容で更新 $ git gui {{ref_image git_gui.jpg}} !!!プロジェクトの作成 !!プロジェクトコードが保存される3つの場所 +作業ツリー : 直接ファイルを編集 +インデックス(ステージングエリア) : 作業ツリーとリポジトリとの間のバッファ +リポジトリ 作業ツリー -- add --> インデックス -- commit --> ローカルリポジトリ -- push --> リモートリポジトリ !!リポジトリの作成 *Gitのリポジトリは、作業ツリーと同じ場所の.gitディレクトリの中 $mkdir mysite $cd mysite $git init *作業ファイルがなく、管理ファイルのみのリポジトリの場合 $git init --bare hoge !!変更を加える *リポジトリに追加 $git add hoge.txt *サブディレクトリを含めたすべてを登録 $git add . *コミット $git commit -m "Comment for this commit" *gitが変更を把握しているすべてをコミット $git commit -a !add *gitがコミットのための追加・変更をステージする *対話形式に対象を選ぶ $git add -i : *** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help *4.まだ追跡していないファイルをステージする *5.コミットする変更箇所を指定する !mv *ファイル名の変更やファイルの移動 git mv 元ファイル名 後ファイル名 ""mvは、新しいファイルに対する、add と古いファイルに対する rm を自動で行う !ファイルを無視する ::.gitignore *.gitignoreファイルに設定を書き足す *ワイルドカードが使用可能 *通常のファイルで構成管理対象のため共有されてしまう ::.git/info/exclude *.git/info/excludeに記述する方法もある。 *他のユーザとは共有されない。 https://qiita.com/inabe49/items/16ee3d9d1ce68daa9fff ::特定の拡張子を無視する *.exe ::特定のフォルダの中身全てを無視する bin/ ::特定のパターンを無視しない !bin/hoge.exe ::フォルダ内の特定拡張子を無視 package/**/*.class !!変更の確認 !現在の状況を確認 $git status !差分の確認 ::作業ツリーの変更を表示 *パラメータなし $git diff ::ステージングとリポジトリとの差分表示 $git diff --cached ::ステージング含め作業ツリーのすべてをリポジトリと比較 $git diff HEAD ""HEADは現在作業しているブランチの直前のコミットを表すキーワード !!コミットログの確認 ::コミットの履歴を見る $git log ::これまでHEADが辿ってきた履歴を見る $git reflog !!作業を開始する *作業ツリーがgitにどう見えているか $git status !!変更を削除 ::ファイル指定 git checkout ::すべて $git checkout . !!リセットでコミットを書き換える *https://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe !直前のコミット取り消し ::コミットのみ $ git reset --soft HEAD^ ::すべて $ git reset --hard HEAD^ !コミット後の変更を全部取り消し $ git reset --hard HEAD !addの取り消し $ git reset --mixed HEAD !過去の状態に戻す $ git reset --hard 昔のコミットのハッシュ値 ::resetの後最新の状態に戻す $ git reset --hard ORIG_HEAD !直前のリセットを取り消す $ git reset --hard ORIG_HEAD !!!ブランチ ""Git の真髄は、あらゆるものがブランチのように扱われることにある !!ブランチを作る *masterブランチを元にRB_1.0ブランチを作成する *masterブランチは、Subversionにおけるtrunkにあたる $git branch RB_1.0 master ::例 *new ブランチをつくる $git branch new *"*"が打たれているのがcheckout(現在作業ツリーに反映されている)されているブランチ $git branch * master new *新しいブランチをcheckout $git checkout new Switched to branch 'new' *確認 $git branch master * new !!ブランチを切り替える $git checkout RB_1.0 ""Gitでは、ブランチにかかるコストが安い。Gitのブランチはそのブランチで成された最新のコミットだけを記録している !!ブランチ間での変更マージ *ブランチ間で変更をマージする方法はいくつかある **直接マージ: 履歴をマージして一緒にしようとする **圧縮コミット: 変更を圧縮(squash)して別なブランチの先頭にコミット **チェリーピック: コミットを1つとってきて、現在のブランチに適用 !直接マージ *マージ先としたいブランチに切り替え $git checkout master $git merge {マージしたいブランチ} !!!リリースのハンドリング !!タグを打つ *タグの名前(1.0)、タグを打ちたいポイント(RB_1.0) $git tag 1.0 RB_1.0 !!タグ一覧の参照 $git tag !!タグをリモートにpush $git push origin {tag_name} *一括でpush $git push origin --tags $ git push origin master !!rebase:ブランチから変更を取り出し別ブランチの先頭で再生 *masterブランチからブランチしたRB_1.0 の変更をmasterブランチに反映させる *まず、masterブランチへ戻る *rebase で反映させる $git checkout master $git rebase RB_1.0 !!ブランチの削除 *タグを打ってあるため、ブランチを削除しても問題ない $git branch -d RB_1.0 *リリースに対してパッチする場合、タグからブランチすればよい $git branch RB_1.0.1 1.0 $git checkout RB_1.0.1 !!アーカイブする *--formatでアーカイブ形式、--prefixでディレクトリを指定 $git archive --format=zip --prefix=phraseit-0.9/ master >master0.9.zip !!!リモートリポジトリ *gitはリモートのリポジトリも扱える *自分の作業を共有、コピーの取得など可能 !!リモートリポジトリのクローン *リモートリポジトリで作業を始めるためにはクローンの作成が必要 *作業を始めるリモートリポジトリの完全なコピーを作成する $git clone ssh://root@rev.typea.info/var/www/git/phraseit !!git remote ,作業,コマンド ,追加,git remote add ,削除,git remote rm ,確認,git remote -v ,URL変更,git remote set-url ,名前変更,git remote rename !!Webから確認 *[GitWebで簡単にGitサーバーの情報を閲覧できるようにする|http://typea.info/blg/glob/2015/04/gitwebgit.html] !!同期 !リモートブランチの確認(branch -r) $ git branch -r Github/master origin/master !git fetch *ローカルリポジトリにないリモートリポジトリのコミットオブジェクトをローカルリポジトリに追加 *リモートブランチの履歴取り込。このとき更新されるのは、あくまで指定したリモートブランチに対応する「リモート追跡ブランチ」です。(git fetch はローカルブランチ、インデックスや作業ツリーに一切の変更を加えません。) !git merge *両ブランチで変更されたファイルのスナップショットを再作成して,新しいコミットオブジェクトを自動生成 *更新されたリモート追跡ブランチを、現在のブランチにマージする $ git merge FETCH_HEAD !git pull *git fetch と git merge を合わせた動作 *git pull $ git pull origin master !!!Tips !!日本語ファイル名 *日本語ファイル名は "\nnn" にエスケープされてしまって読めない。以下の設定を追加することで日本語ファイル名が表示されるようになる。 $ git config --global core.quotepath false !!Gitでやらかしたときに使えるコマンド *https://qiita.com/muran001/items/dea2bbbaea1260098051