コマンドラインから使うGit(入門編)
● init : 初期化
Gitを使うよという宣言です。
( カレントディレクトリ以下に .git/ ディレクトリを作成します)
git init
● clone : リモートリポジトリからクローンする
・ディレクトリを作成してクローンする
URLのところは (https://)形式の代わりに(git@bitbucket.org:MYNAME/test.git)のようなsshでもOKです。
git clone https://xxx.yyy.zzz@aaa.bbb/hogehoge.git
(注)composer の vendor 以下はクローンされないことが多いので composer install をする
・ディレクトリ名を変更してクローンする
git clone https://xxx.yyy.zzz@aaa.bbb/hogehoge.git [my_dir_name]
・一番上のディレクトリを作成せずにクローンする
git clone https://xxx.yyy.zzz@aaa.bbb/hogehoge.git ./
● 名前とメールアドレスの設定
git config user.name "John Doe"
git config user.email johndoe@example.com
● add : ファイルの追加
addコマンドはファイルをstageする(=次回のcommit対象にする)コマンドです。
・ファイルを1つ追加
git add test.txt
・カレントディレクトリ以下のすべてのファイルを追加
git add .
・カレントディレクトリ以下のすべてのファイルを追加(ファイル名表示有り)
git add -n .
● status : stageしたファイルを見る
git status
変更があったけどまだstageされてないファイルやディレクトリは赤で表示されます。
● reset : stageしたファイルやディレクトリを取り消す
・stage したファイル全てを一括で取り消す
git reset
・stage した特定のファイルを取り消す
stageした test.txt を取り消します
git reset test.txt
・コミットが必要なファイルを取り消す
git statusでステータスを確認し、Changes not staged for commit:というメッセージで表示されているファイルは、以下のコマンドでコミットを取り消すことができます。
git checkout file_name //特定のファイル
git checkout . //すべて
● commit : stageしたファイルをコミットする
git commit -m "任意のコミットメッセージ"
チーム内で次のように簡単なメッセージのルールを決めておくといいでしょう。
git commit -m "[add] 追加の目的"
git commit -m "[fix] 修正の目的"
● commit –amend : コミットし忘れたファイルをコミットへ追加する
git commit --amend
すでにステージ上にあるファイルを.gitignoreに追加する
ファイル自体は残す場合
git rm —-cached [削除したいファイル]
git add -A
git commit -m "add xxx to .gitignore"
● remote : リモートリポジトリを追加する
・リモートリポジトリを追加する
リモートリポジトリは https , ssh どちらかで設定します。
git remote add [remote-short-name] [url]
git remote add origin git@bitbucket.org:econosys_system/myapp.git
ユーザー名は @ をつけることで潜り込ませることができます
git remote add origin https://econosys-system@gitlab.com/econosys-system/hogehoge.git
・リモートリポジトリを変更する
git remote set-url origin https://econosys_system@bitbucket.org/econosys_system/outono_app.git
・リモートリポジトリを削除(追加を取りやめ)する
リモートリポジトリ本体が削除されるわけではありません
git remote rm [remote-short-name]
git remote rm origin
・リモートリポジトリを表示する(ショートネーム表示)
git remote
・リモートリポジトリを表示する(詳細表示)
git remote -v
● log gitのログを確認する
すべてのログを確認する(q で閲覧モードから抜ける)
git log
最後の1件のログ表示
git log -1
● ls-remote gitのリモートリポジトリの更新を確認する
方法1. show-branch コマンド
git show-branch --all --color
方法2. リモートとローカルのコミットIDを比較する。
git ls-remote origin HEAD ; git log -1 HEAD
リモートのログを確認(全部入り)
(ローカルを見ているのでは???)
git log --oneline --decorate --graph --branches --tags --remotes
● push : リモートリポジトリへpushする
git push [remote-short-name] [branch-name]
[remote-short-name]リモートリポジトリのショートネームを指定します。
[remote-short-name]ローカルリポジトリのブランチを指定します。
つまり push するときにはこの2つを知っている必要があります。
# リモートリポジトリとローカルリポジトリのブランチを表示させる
git remote -v
git branch
● pull : リモートリポジトリからpullする
git pull [remote-short-name] [branch-name]
● branch : ブランチを確認する
・ローカルブランチを確認する
git branch
* が付いているブランチがカレントのブランチ
(ただしリモートにだけあるブランチは表示されない。)
・リモートブランチを確認する
(git fetch)して事前にリモートのブランチ情報を取り込んでおく。
git fetch
git branch -r
・ローカル / リモートトラッキングブランチ両方のブランチを確認する
git branch -a
● branch : 現在のブランチから派生ブランチを作成する
・現在のブランチから「develop」ブランチを作成する
git branch develop
● checkout : ブランチを切り替える
・現在のブランチから「develop」ブランチへ切り替える
git checkout develop
# 続けて現在のブランチを確認する
git branch
git version 2.23以降はswitchコマンドが使用できます
・現在のブランチから「develop」ブランチへ切り替える
git switch develop
● checkout -b : ブランチを作成しつつ、作成したブランチに切り替える
・現在のブランチから「develop__api」ブランチを作成しつつ切り替える
git checkout -b develop__api
● git diff での日本語の文字化けを防ぐ
export GIT_PAGER="LESSCHARSET=utf-8 less"
● 強制的にリモートに合わせる
git fetch origin
git reset --hard origin/master
● ブランチを指定してzipファイルを作成する
master ブランチから test.zip を作成します
git archive master --output=test.zip
● ログの表示
デフォルトのログ表示(見にくいです)
git log
( q を押してログ画面から抜けます。)
● ログ表示を見やすくする
(Windowsで)グローバルに設定する場合は C:\Users\<ユーザー名>.gitconfig に
(Macで)グローバルに設定する場合は ~/.gitconfig に
gitリポジトリごとに設定する場合は .git/config に
以下を追加します
[alias]
plog = log --pretty='format:%C(yellow)%h %C(green)%cd %C(reset)%s %C(red)%d %C(cyan)[%an]' --date=iso -15
log コマンドの代わりに plog を使用します。
● plogで ログを見やすく表示
git plog
● Windows で git log が文字化けするときの対処法
git config --global core.pager "LESSCHARSET=utf-8 less"
● plogで リモートのログを表示
git fetch origin
git plog origin/master
最初に fetch しないとリモートの情報は更新されてきません。
● リモートリポジトリとローカルリポジトリの差を表示する
git fetch
● 最低限必要なGitコマンド
# 現状把握系(随時、癖のように打つ)
$ git status # 現在のワーキングディレクトリ、ステージエリアの状態みる
$ git log --graph --oneline # ブランチの状態確認
$ git log --graph --oneline --all # リポジトリの状態確認
$ git log -p # 直近何やってたか確認
# ローカル最新化
$ git checkout <branchname> # 最新化の準備(大体master)
$ git pull # 最新化
# ブランチ作成とチェックアウト
$ git checkout -b <newbranchname> # 作成してチェックアウト
$ git branch -d <newbbbbranchname> # タイポしたので削除
# コード書いてコミットを繰り返す
$ git diff -w <filename> # 差分確認
$ git add <filename> # ステージ
$ git reset HEAD <filename> # ステージやめる
$ git checkout <filename> # 変更戻す
$ git diff HEAD # コミット前最終確認
$ git commit # コミット
# プルリクエスト準備のため、ローカルブランチをリモートにプッシュ
$ git push -u origin newbranchname
● Git | 一度コミットしたファイルを後から除外する
一度コミットしたファイルは、.gitignore等に追加してもリポジトリに残ったままになります。
リポジトリから削除するためには下記の操作が必要です
ファイル削除はせず+リポジトリからも削除をする場合
git rm --cached -f filename
● 差分を抽出する
HEAD~1 : 1つ前のコミットとの差分を抽出する
HEAD~2 : 2つ前のコミットとの差分を抽出する
git archive --format=zip --prefix=archive/ HEAD `git diff --name-only HEAD HEAD~1` -o archive.zip
gitで差分ファイルを抽出してzipにまとめる方法 – HAM MEDIA MEMO
● git submodule
https://qiita.com/aki_55p/items/ed3f1d77b3a7235c8bec
https://qiita.com/sotarok/items/0d525e568a6088f6f6bb
● gitでコミットしたファイルの一覧を取得
git log -1 --name-only
● 一時的に前のコミットに戻って、再度最新のコミットに戻ってくる
git log
結果のリストの中に
commit c7824bd074e64cab49fa3d7634e06912f009dd02
のような文字列があればそれがコミットのIDです。
1. 一時的に前のコミットに戻る
git checkout <コミットID>
現在どこのコミットにいるか確認します。
git branch
2. 最新のコミットに戻る
git checkout master
● git参考サイト
● ブランチ切って更新してマージする
1-1.ブランチ一覧の確認
git branch
( *が付いているのが今いる作業ブランチ )
1-1.developブランチへ移動
(ブランチがない場合はエラーとなります)
git checkout dev__contact
1-2.feature-create-apiを作成し、移動する
git checkout -b dev__contact
2. dev__contact ブランチで作業
機能実装後、
git add .
git commit -m "commit message!"
git push origin dev__contact
などとして、remoteに反映。
3.developへのマージ作業
3-1.マージ先のブランチに移動
git checkout master
3-2. マージ前の確認(確認)
git fetch origin master
git diff HEAD..origin/master
3-3. マージ
git merge --no-ff dev__contact
--no-ffオプション:fast-forwardの関係であっても、必ずマージコミットを作る
機能追加が見やすいので、僕らのプロジェクトではこの--no-ffオプションを使っている
mergeする時、ローカルのdevelopブランチを最新の状態にするのを忘れずに!(以前筆者は躓いた)
▼(参考)図で分かるgit-mergeの–ff, –no-ff, –squashの違い
http://d.hatena.ne.jp/sinsoku/20111025/1319497900
● git の config設定
・core.autocrlf
autocrlfとは? → リポジトリ(LF)とワーキングツリー(CRLF)の自動変換
git config --global core.autocrlf false
・core.safecrlf
safecrlfとは? → CRLFとLFが混じったテキストファイルをコミットできなくする
git config --global core.safecrlf true
・push.default
simpleに設定しておくと安全。
カレントブランチと同名のリモートブランチが存在する場合のみ、カレントブランチのpushが行われる。
git config --global push.default simple
● 【Git】リモートトラッキングブランチを確認する
git fetch
git branch -a
● リモートのブランチを取得し、同時に切り替える
git checkout -b local_branch_name origin/remote_branch_name
local_branch_name : ローカルのブランチ名
remote_branch_name : リモートのブランチ名
だが、同じにしておけば良い。
● untracked files を削除する
ファイルを追加したけど、ステージにはあげてなくて、もういらないから削除したい。
そんな時はこちらのコマンド
1. untracked files を確認する
git clean -dn
1. untracked files を削除する
git clean -df
● Windows で git log が文字化けするのを修正する
git config --global core.pager "LESSCHARSET=utf-8 less"
● ファイル名をの大文字、小文字を変更した時に差分対象にならない不具合を修正する
「大文字、小文字を無視するフラグ」を false にする
git config core.ignorecase false
「大文字、小文字を無視するフラグ」を確認する
git config -l --local | grep core.ignorecase
core.ignorecase=true 大文字小文字を無視する
core.ignorecase=false 大文字小文字を区別する