GIT チートシート
Fab AcademyのためのGITガイド
GITの初期設定
git config –global user.name “Joe Smith”
git config –global user.email “jSmith@mail.com”
git config –global credential.helper osxkeychain
(MAC Only or use SSH Key)
git config –list
git config –global core.editor “nameOfTextEditor -wl1”
(‘-w’ wait, ‘l1’ cursor at line 1)
git config –global color.ui true
コマンドラインの色のセット
cat .gitconfig
設定ファイルの確認
ターミナルを使ってローカル環境にGitプロジェクトを設定する
操作に慣れるために、まずはターミナル環境でGitをやってみます。 以下の例はGit管理したいフォルダを設定し、ファイルを追加する例です。 フォルダの置き場所はローカルの好きな場所でよいです。Git管理するファイルはあらかじめ作成しておいてください。
git init ls -a (list all) git status
add コマンドをすることで編集した履歴をバージョン管理に追加します。
git add ‘filename’
編集した履歴をcommitします。 commitの際に編集の意図がわかるようなコメントを入力します。50文字を超えないようにしてください。
git commit -m “ commit message here”
logコマンドを使うと今までの編集(commit)履歴を見ることができます。
git log
リモートリポジトリへのpush
リモートリポジトリはブランチのように機能します。ローカルで管理したGitのファイルをリモートサーバー上に置くことができます。
リポジトリをGitHubなどのクラウドサービスに作成し、リンクをコピーしておきます.リモートリポジトリを先ほど作成したローカルのGit管理下に加えます。
git remote add origin http://github… (links to the remote repro.)
リモートリポジトリにオリジナルのローカルファイル群(Masterブランチ)をpushします。
git push -u origin master (pushing master to origin -u upstream )
Masterがpushされたリモートリポジトリをローカルにpull(fetch,margeが一緒にされるコマンド、後述)します。
git pull (+ git fetch) (+ git merge)
git status
git add .
リモートリポジトリが反映された状況でcommitします。
git commit -m ” descriptive commit message here”
最後に再度pushするとリモートとローカルが同じ状況になります。
git push
リモートリポジトリはどのように機能するのか
先ほど作成したリモートリポジトリ(origin/master)はmasterのブランチのひとつだととらえることができます。git fetchコマンドは、全てのorigin/master上の編集のコピーをしますが、masterブランチにマージはされません。
masterブランチに履歴を反映させるにはgit mergeコマンドを使います。
> git pullコマンドはgit fetch と git merge を同時にできます。
リモートリポジトリの差分をマージさせたくない場合もあるので、シーンによってコマンドを使い分けます。 fetchコマンドの場合、origin/master と master はmargeされている状態で全く同じように見えますが、実際はヘッドポインターの位置が異なります。
これをマージすることでヘッドポインターの位置が合うのです。
ファイル管理
git status
プロジェクトのステータスを確認できます
ステージ追加(ADD)
git add .
編集したファイルをすべてステージに追加します。
git add ‘filename’
git add ‘filename’ ‘filename’ ‘filename’
選択したファイルのadd
git *.html
指定した種類(html)ファイルのadd
git add ‘folderName/*’
フォルダ内のファイルをすべてaddする
コミット
git commit -m “commit message here”
短縮版: git commit -am “commit message”
ステージングとコミットを一度にする。ただし名称変更や削除したファイルは含まれないため別コミットでやる必要がある。
移動
git rm ‘filename’
ステージからファイルを削除する。本当に削除するにはコミットする。
git rm –cashed filename
ファイルをステージから降ろす。
リネーム
ブラウザ内でファイル名を変えた場合、削除扱いのものと、バージョン管理外のものと2ファイル表示される。ステージに追加されるとファイル名が変わったことがわかる。(註:この部分の訳が間違っているかもしれません)原文: If file name changed in browser, it shows up as 2 files (delete and untracked) do an add and in stages it knows it is a rename (data 50% the same)
git内ではリネームも移動も同じ扱い。
git mv ‘filename’ ‘filename’
ファイル名を変更し、ステージに上げる
MOVE FILES
git mv ‘filename’ ‘folderName/filename’
名前の変更と同時にリネームされた場合(?)ステージ上にリネーム後のファイルとして表示される。
差分を見る
git diff
リポジトリとローカルの差分を表示する。
git diff ‘filename’
特定のファイルの差分を表示
git diff –staged
ステージ上のリポジトリとローカルの差分を表示する。
git diff –color-words ‘filename’
差分を並べて表示する
ログ
git log -n 5
最新5件のログを表示する
git log –since=2016-01-15
任意の日付からのログを表示する
git log –until=2016-01-15
任意の日付までのログを表示する
git log –autor=”NAME”
特定のユーザーのコミットを表示する
git log –grep=”Inint”
コミットメッセージに任意の文字が含むものを探す
git log –oneline
S-H-A(後述)の短縮形を表示し、コミットメッセージを1行にする
git log “SHA-1 of commit”.. “fileName”
指定したファイルがコミットから何が変更されたのか表示をする("を取って使用)
git log -p “SHA-1 of commit”.. “fileName”
指定したファイルがコミットから何が変更されたのか表示をする("を取って使用)
git log –graph
コミットの履歴をツリー上にグラフとして表示する
git log –oneline –graph –decorate
アンドゥ、変更、元に戻す
git checkout – ‘filename or directory’
ローカルバージョンを破棄し、リポジトリを復元する。 同じブランチ名があることを考慮してファイルだけチェックアウトする(?)。
ステージを戻す
git reset HEAD ‘filename’
コミットするファイルをまとめているときに1つのファイルだけ外す。
最後のコミットを修正する
git commit –amend -m “message”
最後のコミットに戻り、編集を加えるかコミットメッセージを変更する。 最後のコミットの編集になるので新たなログは作成されない。
以前のバージョンのファイル取得
git checkout ‘S-H-A number of the commit you want to take it from’ – ‘filename’
(S-H-A numberとはgit logの各コミットにある'commit nr'に書かれている固有番号です。これをステージエリアに置き、履歴を維持するためにコミットします)
以前のコミットの取得
git revert ‘S-H-A number of the commit you want to take it from’
(コミットメッセージを編集して保存します。このコマンドは取得した以前のバージョンをすぐにコミットします。‘-in’ オプションをつけた場合はすぐにコミットせず、ステージに置かれた状態でユーザーがコミットするまで待ちます)
ソフトリセット
ソフトリセットは、HEADポインタを移動しますが他は何もしません。 ステージのインデックスとワーキングディレクトリが残ります。
最後のいくつかのコミットをテキストエディタにコピーしてソフトリセット時に参照するのがよいでしょう。
git reset –soft ‘SHA nr. of the commit you want to go back to’
HEADポインタをあるコミットから移動し、他は何もしない
cat .git/refs/heads/master (SHA nr. head がどこを指しているか見る)
複合リセット
複合リセットはソフトリセットと同じ動きをしますが、ステージインデックスがリポジトリと同じものに見えるという点が異なります(?)
git reset –mixed ‘SHA nr. of the commit you want to go back to’
変更には再ステージングと再コミットが必要です。
ハードリセット
ステージインデックスとワーキングディレクトリをリポジトリと同じにします。 これはその後に起こった事を破棄します。
git reset –hard ‘SHA nr. of the commit you want to go back to’
追跡されていないファイルを削除する
git clean -n
削除されるファイルをプレビューする Preview the files that are going to be deleted.
git clean -f
ステージ上にないファイルを強制削除する
ブランチ管理
ブランチの作成
git branch
現在のブランチの表示
git branch ‘name’
新しいブランチを作成する。ブランチ名にはスペースやピリオドを入れない事
git checkout ‘name’
ブランチに移動する
git checkout -b ‘name’
自動で新しいブランチに移動する
git checkout master
マスターブランチに戻る
ブランチの比較
git diff ‘branchName’..’branchName’
ブランチの違いを表示する
git diff –color-words ‘branchName’..’branchName’
ブランチの違いを行ごとに色分けして表示する
git branch –merged
マージされたブランチを表示する。
ブランチのリネーム
git branch -m ‘oldBranchName’ ‘newBranchName’
-m もしくは -move と入力します。gitではrenameとMoveは同じ意味です
ブランチの削除
git branch -d ‘branchName’
-d もしくは –delete と入力します。, 削除するブランチで作業はできません
git branch -D ‘branch name’
ブランチの強制削除
ブランチのマージ
ワークフロー
マージしたいブランチに移動します。2つのブランチには保留したり追跡していないファイルがない状態にしておきます。
git merge ‘branch name to be merge’
git commit -a -m “message here”
すべてがコミットされます。
ファストフォワード:
もしブランチがマスターより進んでいて、マスターに変更がされていない場合、ブランチはマスターのタイムラインにheadを移動します。コミットメッセージはログに残りません。
git merge –no-ff ‘branchName’
新しいコミットとメッセージを強制的に残します。マージの際にコメントを残したい場合に使用します。
git merge –ff-only ‘branchName’
早送りができる場合のみマージします。
真のマージ:
これにより、コミットメッセージを書くためのテキストエディタが開きます。ログをセーブした後、マージされているファイルのリストと'再帰'戦略のためのマージだと言うべきです。(?)
マージコンフリクト
3つのオプション、中断、手動マージ、マージツールの利用があります。
git merge –abort
マージを中断する
git show ‘6 first numbers in S-H-A ID’ (to see changes)
In text file git puts in to indicate conflicts with:
<<<<<<< HEAD
==========
text edits
git branch –merged
マージ済みのブランチを表示する
git branch –no –merge
git log –graph –oneline –all –decorate
マージをグラフィカルに表示する
マージを簡単にするためののTop Tips
- コミットは小さく
- マージはこまめに
- チェンジャーをマスターに追跡する(ブランチがマスターと同期し続けられる)
スタッシュの変更
スタッシュはリポジトリにコミットしなくても一時的に変更を保存できる場所です。あとで保存するために入れておく引き出しのようなものです。スタッシュはリポジトリの一部でも、ステージインデックスでもワーキングディレクトリでもないGit上第4の領域です。 そこに入っているものはコミットではありませんがコミットのように操作、機能し、コミットのように履歴のスナップショットを残します。
git stash save “message”
スタッシュの履歴を見る
git stash list
‘stash@{0}’で参照されるIDはすべてのブランチ上で利用できます。
git stash show ‘stash@{0}’
('を削除する)
git stash show -p ‘stash@{0}’
詳細情報の確認
スタッシュ履歴の取得
git stash pop ‘stash@{0}’
スタッシュから取り除く。数字は0から始まるので、3番目のスタッシュを対象とする際は2とする
git stash apply ‘stash@{0}’
スタッシュにコピーを残す
スタッシュ履歴の削除
git stash drop ‘stash@{0}’
git stash clear
すべてを削除する