#author("2017-05-12T13:58:38+09:00","default:wikiwriter","wikiwriter") &tag(git/運用); *目次 [#t8791a3d] #contents *参考情報 [#v1b534bd] -[[git]] *リポジトリの初期化 [#m6213818] フォルダに移動しgit initを実行するだけ。 mkdir myproduct cd myproduct git init *ファイルを追加 [#lf924da4] **現在のフォルダ以下のファイルをすべて追加 [#aeb24cd4] git add . **git add .したのを全部とりけす [#je61f75d] -[[version control - Undo 'git add' before commit - Stack Overflow:http://stackoverflow.com/questions/348170/undo-git-add-before-commit]]によると以下のコマンドでいける。 git rm -r --cached . -そして追加するとき-nつきで実行すればよいとアドバイスされている。 git add -n . **指定ファイルを追加 [#lfc39bca] git add sample.txt **バージョン管理しているファイルをすべて追加 [#c0e50c6b] git add -u **バージョン管理しているファイル&新規ファイル [#w6d3a1ed] git add -A **.gitignore [#f5017f59] バージョン管理から除外したいファイルはリポジトリのルートディレクトリに.gitignoreファイルを作成する *~ *コミット [#p2bef697] **ログを直接指定 [#l3e007c9] "-m"オプションでログを直接記録できる git commit -m "sample.txt added" **エディタでログを指定 [#a93c4c18] "-m"オプションを使わない場合エディタが立ち上がる。 -1行目: 変更内容の要約 -2行目: 空行 -3行目以降: 変更した理由の説明。 **一括コミットしたい場合 [#qacd5209] git commit -a **変更点を確認しつつコミットログを書く [#z0e37053] git commit -v **特定ファイルだけcommit [#te23105b] git commit sample.txt **特定ファイルの変更記録要求を取り消す [#c1f99bd0] git reset sample.txt *変更点の確認 [#c7eb3f28] **変更記録をリクエストしてない変更点の表示 [#sce4c205] git diff git diffコマンドはgitに変更点を記録したいとリクエストしてない変更点を出力するので変更されたファイルをgit addすると表示されなくなる。 ** commitしていない変更点を表示 [#z6f4e958] git diff HEAD ** 部分変更をインデックスに記録した場合の変更点の表示 [#nb7d3c35] git diff --cached *状態の記録をリクエスト [#gbf0a90b] git addコマンドを使って状態の記録をリクエスト(=インデックスに記録)することができる。 ** 個別にファイルを指定 [#r2db820b] git add sample.txt ** バージョン管理しているすべてのファイル [#i92921ca] git add -u **部分変更 [#s834dcd3] 変更点が2箇所以上ある場合、変更箇所を確認しながらaddする箇所を選定できる。 git add -p *状態の確認 [#x0c4ca35] git status *履歴の表示 [#y1aa28b1] **ログを表示する [#jed601a1] git log --pretty=short **パスで検索する [#f35d1cf7] git log --pretty=short sample.txt **ログメッセージをgrep検索する [#e1800f9d] git log --pretty=short grep='xxx' **特定ファイルのログをdiff表示つきで表示 [#i36bcdce] - git logに-pオプションを付けて試用する。 git log -p ファイルパス *変更を取り消す [#s76f8da5] ** 過去のコミットを取り消す [#sf9cc8a5] git revert xxxxx **ワークツリーの変更を取り消す [#o9f355b5] -インデックスに記録されている状態に戻す(sample.txtだけ) git checkout sample.txt -全体を戻す場合 git checkout . -最新のコミットの状態に戻す git checkout HEAD sample.txt **コミットをなかったことにする [#s2218b0d] git reset HEAD^を使う。部分コミットしたい場合に間違えたときなどに使う。 git commit -a # 間違えたコミット git reset HEAD^ #現在のヘッドの一つ前に戻る。 ワークツリーの内容も戻す場合 git reset --hard HEAD^ **コミットをやり直す [#ecabf10c] ログメッセージを記録し直したい場合に使う。git reset HEAD^→ git commitのような感じ。 git commit --amend **二つ以上前のコミットを書き換える [#gb093cb9] HEADから3つ前のコミットを書き換える場合。 git rebase -i HEAD-3 実行するとエディタで指示票の編集画面が表示されるので、pick→editに書き換え保存する。 pick xxxxxx あれをこうした pick yyyyyyy それをあれした pick zzzzzz それからこうなった。 最初の行のコミットを書き換える場合 edit xxxxxx あれをこうした pick yyyyyyy それをあれした pick zzzzzz それからこうなった。 コミットを修正。 git commit --amend 続く混みとを反映する git rebase --continue *変更の確認 [#zd766f37] **過去のリビジョンの動作確認をしたあと戻る方法 [#w6e4be46] -[[Git 昔のコミットに戻して動作確認をする:http://tk2-207-13211.vs.sakura.ne.jp/2016/05/862/]] git reset --hard リビジョン git reset --hard ORIG_HEAD *バックアップリポジトリを作成する [#q3019b1b] **空リポジトリの作成 [#g2ec6cc1] /home/repository/sample.gitディレクトリに空のリポジトリを作成する。 $ mkdir -p /home/repository/sample.git $ cd /home/repository/sample.git $ git --bare init **オリジナルワークツリーの内容をpush [#dace9143] $ cd <ワークツリー> $ git push /home/repository/sample.git master $ git remote add origin /home/repository/sample.git ***2回目移行のpush(最初は次を実行。それ以降はgit pushだけでいける。 [#uf776fb4] $ git push -u(--set-upstream) origin master ※[[自分用のGit備忘録 - kanonjiの日記:http://d.hatena.ne.jp/kanonji/20110306/1299420083]] **バックアップリポジトリからcloneして使う [#bd255ac7] $ git clone /home/repository/sample.git sample.new **cloneしたワークツリーの内容をpush [#o01979f4] ざっくり書くと 「git push <反映先> <反映もと>」となる。 $ git push (git push origin masterと同じ) *共同開発 [#s2406e8e] **マージ [#zb9cb859] git pullとgit pushを駆使する。この辺はCSV、Subversionと同じような感じか。 **共用リポジトリ [#bfd14fee] -プロジェクトのグループメンバーは1つのUNIXグループに属するようにする。 -git init --sharedオプションでリポジトリを作る。 -umask 002とか007を使って、グループのメンバーが書き込めるようにする #pre{{ umask 002 mkdir -p /home/repository/bigproject.git cd /home/repository/bigproject.git git --bare init --shared }} *ブランチ [#b0777dee] **参考情報 [#k2df265d] -[[Git - ブランチとは:http://git-scm.com/book/ja/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF]] -[[Git - ブランチとマージの基本:http://git-scm.com/book/ja/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%AE%E5%9F%BA%E6%9C%AC]] **ブランチを作る [#p33e4f72] "bugfix-a"というブランチを作り、ワークツリーをそのブランチに切り替える git checkout -b bugfix-a 以下のコマンドと同じ git branch bugfix-a git checkout bugfix-a **現在のブランチを表示する [#p70ff915] git branch **ブランチを切り替える [#u81a1624] git checkout master git checkout bugfix-a **ブランチの内容を併合する [#n6058f6f] バグフィックス用のブランチbugfix-aで行った変更をメインブランチに併合するには git checkout master git merge bugfix-a **ブランチを後から作る [#x097235b] 現在のワークツリーの内容をブランチとして、3つ戻ったところをマスターとする。 git branth bugfix-b git reset --hard master-3 **ブランチ移動の際の変更 [#l8d3969d] ブランチ移動の際にワークツリーでコミットされていないファイルがある場合混乱することがある。 現在bugfix-cブランチにいてmaster→bugfix-cに戻るとき次のようにする。 git stash git checkout master <masterブランチでいろいろ修正> git checkout bugfix-c git stash pop *リモートリポジトリ定義 [#nb32e2e8] リモートリポジトリに対するエイリアス定義のようなもの? git remote add sample git://repo.aaa.com/git/sample.git とすれば以後 git fetch sampleとすれば最新の状態をコピーすることができる。 *公開リポジトリ [#g2054ddb] -git, ssh, http(webdav)プロトコルを使って公開することができる。 -git cloneするときにプロトコル部分を省略するとsshとみなされる。