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 fetchgit 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

すべてを削除する


MORE INFO(英語)

MORE INFO(日本語)