Gitコマンドメモ

Gitコマンドや動作のメモです。


使用ツール

最近はコマンドよりも普段はSourceTreeを使用しています。GithubDesktopはたまに利用するくらいです。


git init

git リポジトリが作成されます。


使い方

git init


git initで .git ディレクトリが作成されます。


init

git init

Initialized empty Git repository in フルパス/.git/


git status 状態確認

git の状態を確認したい場合はgit statusを使用します。


gitの状態を確認

git status



git add ファイル名

指定したファイルをステージに移動します。


ファイルをステージへ移動

git add ファイル名


パス付きでファイル名を指定します。


git reset HEAD^ ファイル名

git addの取り消しです。


ファイルをステージへ移動

git reset HEAD^ ファイル名


SourceTreeを使うようになり、チェックを外すとステージから戻せるので、大幅に使用頻度が減りました。


git commit -m "メッセージ"


メッセージをつけてコミット

git commit -m "メッセージ" 


SourceTreeを使うようになり、GUIからコメント付きでコミットできるようになったので、コマンドの使用頻度が減りました。


変更のない空コミット

ファイルを変更せず、コミットだけをしたい場合は、--allow-empty を付けます。


ファイル変更なしでコミット

git commit --allow-empty -m "メッセージ"


変更のない空コミットで、プルリクエストの作成が楽になります。まずはプルリクエストを作ってから作業しようみたいな不フローに便利です。


commit のメッセージを変更

コミットメッセージを間違えてしまい、コミットメッセージのみ変更したい場合は、--amend

を付けます。


commitの取り消し

git commit --amend -m "変更するメッセージ"


すると最新コミットのメッセージのみが変更されます。


git commit を取り消し

git commitしたものの取り消したい場合です。 commitの取り消しはいくつかパターンがあるのでどれが良いかは最初迷いました。


git reset --hard でコミットの取り消し


commitの取り消し

git reset --hard HEAD~1


コミットを1回取り消します。1の部分をたとえば3にすると3回分とりけすことができます。

注意点 : reset --hardをするとコミットしていない変更中ファイルなどが全て消えてしまいます。


git reset --soft でコミットの取り消し

コミットを取り消してステージされた状態に戻したい場合です。


commitの取り消し

git reset --soft HEAD^


最新コミットが取り消され、ステージされた状態に戻ります。ローカルの変更中ファイルも消えません。


git reset --hard ハッシュ でハッシュへ移動

ハッシュを指定すると、commitを何個でもすっ飛ばしてハッシュへ移動できます。


ハッシュへ移動

git reset --hard ハッシュ名



ハッシュへ移動

git reset --hard ac9f9b71dd20c59d76c5e684530572e322f12640



git revert でコミットの取り消し

git resetでコミットを取り消しではログが残りません。コミットの取り消しをログに残すにはrevertを使用します。


commitの取り消し

git revert ハッシュ値


revertにハッシュ値を指定するとコミットを取り消したコミットが作成されます。


git rm ファイル名

gitで管理していたファイルを削除したい場合です。


ファイルを削除

git rm hoge.php 


git rmで消すことができます。


git rm を取り消し

git rmしたものの取り消したい場合です。


hoge.phpを削除

git rm hoge.php 


あ、これ消しちゃだめなやつだった:(;゙゚'ω゚'):


hoge.phpを復活

git reset HEAD hoge.php 

git checkout hoge.php

reset HEADした後に、checkoutするのがポイントです。


git rm --cached でgit管理から削除

git rmしてgitの管理からは外したいがファイルは削除したくない場合は--cachedをつけます。


Vagrantfileをgit管理から削除

git rm --cached Vagrantfile 


gitからは削除されますがファイルが残っていることを確認してください。


git log ログ確認

git のログを確認したい場合はgit logを使用します。


gitのログを確認

git log


ログが一覧で表示されます。ログモードから抜けたい場合はqを押します。


git checkout -b で新規ブランチの作成


新規ブランチの作成

git checkout -b ブランチ名



特定ファイルの git log を表示


特定ファイルのgitのログを確認

git log ファイル名


例えばhoge.phpファイルの git log を表示したい場合は以下のようにファイル名を指定します。


ファイルのgitのログを確認

git log hoge.php



git log を1行ずつ表示

git logで表示されるログは情報が多いため、情報を絞り1行だけで表示することもできます。


gitのログを確認

git log --oneline


--onelineをつけると1行だけで表示されます。


git branch ブランチの確認

ブランチ周りの操作はgit branchを利用します。


ブランチ一覧を表示

git branch


ブランチ一覧が表示されます。


branch名を変更

ブランチ名を修正する場合は-mを使用します。


ブランチ名を変更

git branch -m 古いブランチ名 新しいブランチ名



branchを削除

ブランチを削除します。


ブランチを削除

git branch -d ブランチ名


-dオプションをつけるとブランチを削除することができます。


branchを一括削除

gitだけではgrepとxargsを組み合わせます。


ブランチを削除

git branch | grep ブランチ名 | xargs git branch -d


以下は、 issue100/fix-nameissue180/improve-action など、 issue1 が含まれるブランチ名のブランチを一括削除する例です。


issue10番台のブランチを削除

git branch | grep issue1 | xargs git branch -d


issue1で始まるブランチが全て消えました。


git merge ブランチを merge

ブランチをmergeするにはgit mergeを利用します。


ブランチをマージ

git merge ブランチ名


以下はmasterという名前のブランチをマージする例です。


masterブランチをマージする例

git merge master



git diffでファイルの差分を表示

ファイルの差分を表示するときはgit diffを利用します。


差分を表示

git diff ファイル名



git diff ブランチ名 でブランチの比較

git diffはブランチそのものを比較できます。


差分を表示

git diff ブランチ名


例えば現在開発中のブランチとdevという名前のブランチと、カレントブランチの差分を確認したい場合は、以下のようにします。


devブランチとの差分を表示

git diff dev


devブランチとカレントブランチとの差分が表示されます。


git stash で一時退避

commitしていないファイルをなかったコトにします。


変更を一時退避

git stash


とりあえずブランチを切り替えたい時などに便利です。


git stash list

git stash した一覧を表示したい場合にはlistをくっつけます。


stashで一時退避したリストを表示

git stash list



git cherry-pick で コミットを取得

あるブランチのあるコミットのみを、別のブランチに反映したい場合です。

cherry-pick の前にgit logで取れるコミットのハッシュを取得しておきます。

そして、cherry-pickで該当するハッシュを指定します。

git cherry-pick 2ed95cb0ab61efd1cc51335257c0226585456e0c

こちらにより、特定のコミットのみを反映出来ました。


git blame で犯人探し

git blameを使うとファイルを編集した人を行単位で調べることができます。


編集した人を探す

git blame ファイル名


以下のようにファイル名を指定します。


編集した人を探す

git blame hoge.php


ただ、これではファイル全行が表示されてしまって膨大になります。


Lオプションで範囲を指定

git blame で特定の範囲だけ、hoge.phpの119行目から123行目の変更履歴を見たい場合です。


編集した人を探す

git blame -L 119,123 hoge.php


,区切りで行数を指定します。スペースが空いては失敗します。


ハッシュを指定で過去のblame

ハッシュを指定すると過去の状態でgit blameを実行できます。


編集した人を探す

git blame ハッシュ名 -- ファイル名



編集した人を探す

git blame 25b82cf75d31d0rf7bd9f6010ef68fbb90dc0b32 -- hoge.php


25b82cfというハッシュのコミットのhoge.phpファイルの編集者を探すことができます。


tig blame で git blame を便利に

tig blameを使うとgit blameよりも探しやすいです。


編集した人を探す

tig blame hoge.php



git tag

git tagを使うとタグ一覧を表示できます。


タグを表示

git tag

1.0.0
1.0.2

タグが表示されます。


git tag -a タグ名 -m メッセージ

-aを使うとメッセージをいれてタグを追加できます。


タグを追加

git tag -a 1.0.2 -m '1.0.2バージョンです(☝ ՞ਊ ՞)'


タグを追加できます。


git push origin タグ名

Githubにタグをpushする場合です。

git push origin 1.0.2

Counting objects: 1, done.
Writing objects: 100% (1/1), 257 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:pugiemonn/pugiemonn.com.git
* [new tag] 1.0.2 -> 1.0.2


git reflogで状態を確認する

git logでログが見つからない場合はreflogが助けになります。

git reflog

f4d1483 HEAD@{0}: checkout: moving from 55898aa648a5e7d702a42b7cdff1e9d4119fdef to f4d148336fa045b155083448b77dce4353461cb
55898aa HEAD@{1}: checkout: moving from f4d148336fa045b155083448b77dce4353461cb to 55898aa648a5e7d702a42b7cdff1e9d4119fdef
f4d1483 HEAD@{2}: checkout: moving from pugiemonn to f4d148336fa045b155083448b77dce4353461cb
55898aa HEAD@{3}: checkout: moving from master to pugiemonn
55898aa HEAD@{4}: commit: 予約のキャンセル機能を追加しました。
f4d1483 HEAD@{5}: commit: authのbefore_actionを追加しました。

略 ・・・

git logはheadの最新ログが表示されますので、ソレ以外を見たい場合はreflogを使用しています。


git rev-parse HEAD で最新Headを取得

いまいるブランチの最新ヘッドが表示されます。


HEADを表示

git rev-parse HEAD

f4d148336fa045b155083448b77dce43534651cb



git name-rev ハッシュでどのブランチのものか調べる

どのブランチでコミットが行われたか調べたい場合にはname-revを使用します。

git name-rev f4d148336fa045b155083448b77dce4353465cb

f4d148336fa045b155083448b77dce4353465cb pubiemonn-branch

上記の例ではpubiemonn-branchのコミットだとわかりました。


git remote で GitHub などリモートのリポジトリを操作

リモートリポジトリを操作する場合のコマンドが、git remote です。


git remote -v で確認

リポジトリの状況を確認できます。

git remove -v


git remote add でリモートリポジトリを追加

GitHub リポジトリを作るときに毎度表示されるコマンドがこちらので、git remote add です。

git remote add 名前 リポジトリURL

GitHub での最初のコードでは名前のところに origin が入っています。


originにURLを指定した例

git remote add origin https://github.com/pugiemonn/pugiemonn.com



git remote rm でリモートリポジトリを削除

git remote rm 名前


originを削除する例

git remote rm origin



origin を指定済みの場合のエラー

origin を指定していてさらに add しようとするとエラーが出ます。

fatal: remote origin already exists.

rm してから add すればエラーは消えます。


GitHubの最新コミットを取り消し

GitHubにpushしても消すことができます。


GitHubへpushしたコミットの取り消し

git push -f origin HEAD^:ブランチ名


ただ、上記はちょっと検証範囲に自信がないかもしれません。

以下はGithubのmasterブランチを消した例です。


Githubのmasterブランチへpushしたコミットの取り消し

git push -f origin HEAD^:master


Githubへpushしちゃったあああ:(;゙゚'ω゚'):みたいなときに。

ただしローカルの変更は残るので、ローカルは別途修正が必要です。


GithubやBitbucketのブランチをローカルブランチで上書き

Githubのリモートブランチのmasterへプルリク間違えてマージしちゃったあああ:(;゙゚'ω゚'):みたいなときに。Githubのブランチがローカルブランチで上書きをしたりします。


Githubのブランチを上書き

git push -f origin ブランチ名



Githubのmasterブランチを上書き

git push -f origin master


-fオプションで上書きします。


git config で gitの設定

gitの設定を確認したり切り替えるには git config を利用します。


設定の確認


設定一覧を確認

git config -l


git config から名前をgrepすれば名前を表示できます。


gitのユーザー名を確認

git config -l | grep user.name

user.name=Pugiemonn


gitに色を設定

gitに色を付ける場合は、color.uiを有効にします。


色を設定

git config color.ui true



git --version でバージョン確認

バージョンの確認したい場合です。


バージョン確認

git --version

git version 2.3.5


参考