Web制作メモ -トップへ-

Git操作まとめ

Ruby2016.02.26 18:43

最初に行う設定(Gitのコンフィグ)

Gitの設定ファイルの場所

$ cat .git/config(Git管理フォルダ直下)
$ cat ~/.gitconfig(ホームディレクトリ)

コミット時のユーザー情報

$ git config --global user.name "[名前]"
$ git config --global user.email "[メールアドレス]"
⇒.git/configが更新される

出力をカラーリング

$ git config --global color.ui auto
⇒ ~/.gitconfigが更新される

長い行を折り返して表示する

$ git config --global core.pager cat

改行コードの自動変換をOFF

$ git config --global core.autocrlf false
※リポジトリに「.gitattributes」があればその設定が優先される

push時のモードをsimpleモードにする。simpleモードは、カレントブランチに追跡ブランチが設定されており、ローカルブランチとリモートブランチの名前が同じファイルだけがpushされる(1.8以降)

$ git config --global push.default simple
⇒ ~/.gitconfigが更新される

fast-forwardでも必ずコミットログを作成する(早送り無効)

git config --global --add merge.ff false

pullのfast-forwardの時はコミットログを作成しない(早送り有効)

git config --global --add pull.ff only

設定の確認

$ git config -l

リモートリポジトリ

リモートリポジトリを表示

$ git remote -v

リモートリポジトリの追加

$ git remote add [リモートリポジトリ名] [リモートリポジトリのURL]

リモートリポジトリのURLを変更

$ git remote set-url [リモートリポジトリ名] [リモートリポジトリのURL]

リモートリポジトリの削除

$ git remote rm [リモートリポジトリ名]

追跡ブランチ

追跡ブランチの追跡先を表示

$ git branch -vv

PUSHと同時に追跡ブランチを登録するには-uオプション

$ git push -u [リモートリポジトリ名] [リモートブランチ名]

カレントブランチの追跡先を設定/変更

$ git branch --set-upstream-to=[リモートリポジトリ名]/[リモートブランチ名]

リモートブランチ

リモートブランチを表示

$ git branch -r

リモートブランチを追加

$ git checkout -b [新しいブランチ名]
$ git push -u [リモートリポジトリ名] [新しいブランチ名]

リモートブランチを削除

$ git push --delete [リモートリポジトリ名] [リモートブランチ名]

リモートブランチを更新

$ git fetch --prune
※「--prune」を付けない場合、削除されたリモートブランチは残り続ける

(ローカル)リポジトリの初期化

そのディレクトリをGit管理する

$ cd [管理したいディレクトリ]
$ git init

管理から外すには.gitフォルダを削除するだけ

$ rm -rf .git

(ローカル)ブランチの操作

(ローカル)ブランチを表示

$ git branch

(ローカル)ブランチを作成してチェックアウト

$ git checkout -b [ブランチ名]
※「-b」を付けない場合、既存のブランチをチェックアウト(ブランチが無い場合エラー)
※ブランチを作成するだけなら「$ git branch [ブランチ名]」

(ローカル)ブランチを削除

$ git branch -D [ブランチ名]

(ローカル)ブランチの名前を変更

$ git branch -m [ブランチ名] [新しいブランチ名]

作業例1:作業ツリーからインデックスに登録する

作業ツリーとインデックスのファイル単位の比較

$ git status -s
 M sample.txt
※「b」を付ければブランチ情報付き
※「s」を付けなければヘルプ情報付き

作業ツリーとインデックスの差分

$ git diff [ファイル名]

変更を取り消したい

$ git checkout -- [ファイル名]
⇒ファイルの内容が修正前に戻る

変更内容に問題なし(インデックスに登録する)

$ git add [ファイル名]
※「$ git add --all」で変更のあったファイルを全て登録できる

作業例2:コミット(ローカルリポジトリに登録)する

インデックスとリモートリポジトリのファイル単位の比較

$ git status -s
M  sample.txt
※「b」を付ければブランチ情報付き
※「s」を付けなければヘルプ情報付き

インデックスとリモートリポジトリの差分

$ git diff --cached [ファイル名]

作業ツリーに戻したい

$ git reset HEAD [ファイル名]

変更内容に問題なし(コミットする)

$ git commit -m "[コミットメッセージ]"
※「m」を付けなければコミットメッセージを複数行書ける
※「a」を付ければaddしなくてもコミットできる(追跡されているファイル全てが対象)

直前のコミットを使う(新たにコミットを作らない)

$ git commit --amend -m "[コミットメッセージ]"

作業例3:リモートリポジトリに登録する

データの取得

$ git fetch
$ git status -sb(更新されたファイルを表示)
$ git diff origin/master(更新内容を表示)
$ git merge origin/master

※上記の作業は「$ git pull (リモートリポジトリ名) (リモートブランチ名)」で1発で済むが、「$ git pull」はトラブルの元らしいのでまずは上記の操作に慣れておく。

データの送信

$ git push (リモートリポジトリ名) (リモートブランチ名)

誰かが作ったリモートリポジトリのブランチを取得する

よくある間違いは「$ git pull [リモートリポジトリ名] [リモートブランチ名]」などとして、カレントブランチにマージしてしまうこと。U新しくリモートブランチを取得したい場合は、どのローカルブランチに取得するのか意識しておくと間違いがない。定番の方法は、「$ git checkout -b」でローカルブランチを新規作成&チェックアウトする方法である。

$ git fetch
$ git checkout -b [作成するローカルリポジトリの名前] [リモートリポジトリ名]/[リモートブランチ名]

コミット履歴の修正など

(ローカル)リポジトリのコミットログを表示

$ git log --oneline --graph -10(1行表示ツリー付きで10件)
$ git log --oneline -3 -p(1行表示差分付きで3件)

指定したコミットに変更

$ git reflog -5(Gitの操作ログを5件確認)
$ git reset --soft HEAD@{1}
※「--soft」はコミットログだけ変更しファイルはそのまま
※「--hard」はファイルの変更も元に戻す

HEADから4個分のコミットをリベース

$ git rebase -i HEAD~4()
※操作方法
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit

今までのファイルを引き継いだままコミットログをまっさらにする

空のブランチを作るには「--orphan」を使います。

$ git checkout --orphan master

今までのファイルはインデックス領域に居るので、そのまま登録してプッシュします。

$ git commit -m "ファーストコミット"
$ git push -u origin master

※Githubのmasterブランチを消すには「Default branch」を何か別のブランチにしておく必要があります。

プッシュしたコミットをamendする(一人プロジェクト用)

ローカルリポジトリのコミットでは「$ commit --amend」が使えますが、既にリモートリポジトリにプッシュしてある場合、通常「$ commit --amend」は使えません。

「$ commit --amend」したコミットが前回のコミットと別のコミットとなってしまいエラーが発生してしまいます。 その場合、「-f(--force)」オプションで強制的に上書きできます。

$ git add --all
$ git commit -a --amend
$ git push -f

※「-f」オプションは、リモートリポジトリを書き換えるので、他の人の環境でエラーが発生するので注意が必要です。

エイリアス設定

使用例:$ git l

git config --global alias.i "remote show origin"
git config --global alias.b "branch -a"
git config --global alias.bb "branch -vv"
git config --global alias.f "fetch --prune"
git config --global alias.s "status -sb"
git config --global alias.ss "status"
git config --global alias.d "diff"
git config --global alias.dd "diff --cached"
git config --global alias.l "log --graph --decorate --oneline -10"
git config --global alias.ll "log --pretty=format:'%C(auto)%h %d%s - %cn, %cr%Creset' --name-status -3"
git config --global alias.lll "log -p -1"

⇒「~/.gitconfig」に保存される