Help us understand the problem. What is going on with this article?

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で消すことができます。

rm を取り消し

rm してしまっても、Git で管理していれば取り消すことができます。

hoge.phpを削除
rm hoge.php 

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

hoge.phpを復活
git checkout -f hoge.php 

checkout -f で削除を取り消しできます。
checkout-f オプションをつけるのがポイントです。

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 pop

git stash した内容を戻したいときは pop を使います。

stashの一時退避最新を戻す
git stash pop

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 だけでは 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を取得

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

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

参考

pugiemonn
GoogleTagManagerを利用してGAを操るようなマーケターとしてお仕事しています(☝ ՞ਊ ՞)
pugiemonn_com
pugiemonn.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした