コマンドラインから使うGit(入門編)

コマンドラインから使う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参考サイト

Githubで一番有名なGit TIPS集 – Qiita

● ブランチ切って更新してマージする

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   大文字小文字を区別する
コマンドラインから使うGit(入門編)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です