Gitコマンドや動作のメモです。
使用ツール
- Git
- https://git-scm.com/book/ja/v1
- SourceTree
- https://www.atlassian.com/ja/software/sourcetree/overview
- Github Desktop
- https://desktop.github.com/
git init
git リポジトリが作成されます。
git init
git initで .git
ディレクトリが作成されます。
git init
Initialized empty Git repository in フルパス/.git/
git status 状態確認
git の状態を確認したい場合はgit status
を使用します。
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
を付けます。
git commit --amend -m "変更するメッセージ"
すると最新コミットのメッセージのみが変更されます。
git commit を取り消し
git commit
したものの取り消したい場合です。 commitの取り消しはいくつかパターンがあるのでどれが良いかは最初迷いました。
git reset --hard でコミットの取り消し
git reset --hard HEAD~1
コミットを1回取り消します。1の部分をたとえば3にすると3回分とりけすことができます。
注意点 : reset --hard
をするとコミットしていない変更中ファイルなどが全て消えてしまいます。
git reset --soft でコミットの取り消し
コミットを取り消してステージされた状態に戻したい場合です。
git reset --soft HEAD^
最新コミットが取り消され、ステージされた状態に戻ります。ローカルの変更中ファイルも消えません。
git reset --hard ハッシュ でハッシュへ移動
ハッシュを指定すると、commitを何個でもすっ飛ばしてハッシュへ移動できます。
git reset --hard ハッシュ名
git reset --hard ac9f9b71dd20c59d76c5e684530572e322f12640
git revert でコミットの取り消し
git reset
でコミットを取り消しではログが残りません。コミットの取り消しをログに残すにはrevertを使用します。
git revert ハッシュ値
revertにハッシュ値を指定するとコミットを取り消したコミットが作成されます。
git rm ファイル名
gitで管理していたファイルを削除したい場合です。
git rm hoge.php
git rm
で消すことができます。
git rm -r ディレクトリ名
gitで管理していたディレクトリを削除したい場合です。
git rm -r hoge
git rm -r
で消すことができます。
rm を取り消し
rm
してしまっても、Git で管理していれば取り消すことができます。
rm hoge.php
あ、これ消しちゃだめなやつだった:(;゙゚'ω゚'):
git checkout -f hoge.php
checkout -f
で削除を取り消しできます。
checkout
に -f
オプションをつけるのがポイントです。
git rm を取り消し
git rm
したものの取り消したい場合です。
git rm hoge.php
あ、これ消しちゃだめなやつだった:(;゙゚'ω゚'):
git reset HEAD hoge.php
git checkout hoge.php
reset HEAD
した後に、checkout
するのがポイントです。
git rm --cached でgit管理から削除
git rm
してgitの管理からは外したいがファイルは削除したくない場合は--cached
をつけます。
git rm --cached Vagrantfile
gitからは削除されますがファイルが残っていることを確認してください。
git log ログ確認
git のログを確認したい場合はgit log
を使用します。
git log
ログが一覧で表示されます。ログモードから抜けたい場合はq
を押します。
git checkout -b で新規ブランチの作成
git checkout -b ブランチ名
特定ファイルの git log を表示
git log ファイル名
例えばhoge.phpファイルの git log
を表示したい場合は以下のようにファイル名を指定します。
git log hoge.php
git log を1行ずつ表示
git log
で表示されるログは情報が多いため、情報を絞り1行だけで表示することもできます。
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-name
や issue180/improve-action
など、 issue1
が含まれるブランチ名のブランチを一括削除する例です。
git branch | grep issue1 | xargs git branch -d
issue1
で始まるブランチが全て消えました。
git merge ブランチを merge
ブランチをmergeするにはgit merge
を利用します。
git merge ブランチ名
以下はmasterという名前のブランチをマージする例です。
git merge master
git diffでファイルの差分を表示
ファイルの差分を表示するときはgit diff
を利用します。
git diff ファイル名
git diff ブランチ名 でブランチの比較
git diff
はブランチそのものを比較できます。
git diff ブランチ名
例えば現在開発中のブランチとdev
という名前のブランチと、カレントブランチの差分を確認したい場合は、以下のようにします。
git diff dev
dev
ブランチとカレントブランチとの差分が表示されます。
git stash で一時退避
commitしていないファイルをなかったコトにします。
git stash
とりあえずブランチを切り替えたい時などに便利です。
git stash pop
git stash
した内容を戻したいときは pop
を使います。
git stash pop
git stash list
git stash
した一覧を表示したい場合にはlist
をくっつけます。
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
だけでは 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 push origin --tags でタグを一気に push
--tags
を使うとタグを一気に push できます。
git push origin --tags
git show タグ名 でタグについてみる
git show
を使うとタグのメッセージを確認できます。
git show タグ名
使用例
git show 0.1
tag 0.1
Tagger: Pugiemonn <pugiemonn@gmail.com>
Date: Tue Aug 27 12:10:51 2019 +0900
初回リリースバージョン
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を取得
いまいるブランチの最新ヘッドが表示されます。
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 が入っています。
git remote add origin https://github.com/pugiemonn/pugiemonn.com
git remote rm でリモートリポジトリを削除
git remote rm 名前
git remote rm origin
origin を指定済みの場合のエラー
origin を指定していてさらに add しようとするとエラーが出ます。
fatal: remote origin already exists.
rm してから add すればエラーは消えます。
GitHubの最新コミットを取り消し
GitHubにpushしても消すことができます。
git push -f origin HEAD^:ブランチ名
ただ、上記はちょっと検証範囲に自信がないかもしれません。
以下はGithubのmasterブランチを消した例です。
git push -f origin HEAD^:master
Githubへpushしちゃったあああ:(;゙゚'ω゚'):みたいなときに。
ただしローカルの変更は残るので、ローカルは別途修正が必要です。
GithubやBitbucketのブランチをローカルブランチで上書き
Githubのリモートブランチのmasterへプルリク間違えてマージしちゃったあああ:(;゙゚'ω゚'):みたいなときに。Githubのブランチがローカルブランチで上書きをしたりします。
git push -f origin ブランチ名
git push -f origin master
-f
オプションで上書きします。
git config で gitの設定
gitの設定を確認したり切り替えるには git config
を利用します。
設定の確認
git config -l
git config
から名前をgrepすれば名前を表示できます。
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