LoginSignup
18
18

More than 5 years have passed since last update.

忘れっぽい人のgitコマンドあれこれ

Last updated at Posted at 2017-05-19

利用頻度は低いが、大事なときに使うgitコマンド

いつもWeb検索しているので、備忘録として残す(随時更新していく予定)。

ワーキングディレクトリ(ローカル)では編集するが、ステージングエリアに反映したくないとき

.gitigonreで対応する場合

1. .gitigonreに追加

対象のディレクトリまたはファイルを追加する。

.gitignore
*.swp
/path/hogehoge

2. cacheを削除

ステータス変更があるファイルについてgit rm --cachedを実行。

$ git rm --cached [file1 file2...]

なお、ステータス変更があるファイルすべてを対象にしたいとき下記コマンドを実行。

$ git rm --cached .

こちらが参考になる。

.gitignoreにも記載したくないとき

下記コマンドを実行する、

$ git update-index --assume-unchanged [file1 file2...]

やってしまったとき

はじめに

こちらが非常にわかりやすく説明の記載があるので、怖いコマンドを実行する前に自信がないときは一読する。

git addの取り消し

既にgit管理されている場合

ファイルを指定しない場合、対象がすべてになる。なお[]内は省略可能。

$ git reset [[--mixed] HEAD] [file1 file2...]

git管理されていない場合

ファイルではなく.を指定すると、対象がすべてになる。

$ git rm --cached [file1 file2...]

git commitの取り消し

ワーキングディレクトリに取り消したcommit内容を反映させる場合

再び、addやcommitができる。

$ git reset --soft HEAD^ 

ワーキングディレクトリに取り消したcommit内容を反映させない場合

元に戻せなくなるので注意が必要。

$ git reset --hard HEAD^ 

git pushの取り消し

方法1

commit_id値はgit logで事前に確認しておく。

$ git revert commit_id
$ git push origin branch_name

方法2

強引に戻すので、いったん現状のブランチをバックアップする。commit_id値はgit logで事前に確認しておく。

$ git branch backup_branch
$ git reset --hard commit_id
$ git push -f origin this_origin

最後にforce pushをしているので、git push origin :this_branchでリモートリポジトリを削除してから、git push origin this_branchでもいいが、どちらにしてもこの方法2の利用は避けたいところ。

方法3

reflogに残っている場合。git reflogで元に戻したいHEAD@{n}を確認し、git reset --hardを実行する。
この方法が個人的には一番安全のように思えるが肝心な時に限ってreflogに残っていないことが多い。

$ git reset --hard HEAD@{n} 

その他

参考資料に記載されている内容も確認する。

特定のファイルを元に戻すとき

特定のファイルをあるコミットの状態に戻したい場合は以下のコマンド。fileはパスも指定する必要がある。

$ git checkout commit_id file

なお、commit前の特定のファイルをheadの状態に戻したい場合は、以下のコマンド。

$ git checkout file

git configコマンド

アカウント変更

プロジェクトごとに変更したい場合、--globalを省くこと。

$ git config --global user.name "last first"
$ git config --global user.email local-parts@domain.tld

エディタ変更

emacsに変更したい場合。

$ git config --global core.editor emacs

git commit時のメッセージをテンプレート化する

~/message/template1.txtにテンプレートを記載する。

$ git config --global commit.template ~/message/template1.txt

ファイルのパーミッションを変更しても、無視する設定

chmodでgit管理下にあるファイルのパーミッションを変更すると、変更したファイルとして扱われてしまう。下記コマンドを実行することで、ファイルのパーミッションを変更しても無視扱いとなる。

$ git config core.filemode false

configの確認

下記コマンドで全てのconfig内容が確認できる。なお、--listではなく--lでも結果は同一。

$ git config --list

core.filemodeだけ確認したいときは、下記コマンドで。

$ git config --list | grep core.filemode

git stash関連

リスト表示

まずはstashされている内容を確認する。

$ git stash list

n番目のstash

下記コマンドについて、最新のstashを戻す場合、stash@{n}は不要。

対象ファイル一覧

stashされているファイルの一覧を確認するときは、下記コマンドを実行。

$ git stash show stash@{n}

変更差分

stashされているファイルと現在のワーキングディレクトリの差分を確認するときは下記コマンドを実行。

$ git stash show -p stash@{n}

HEADとの差分は下記で確認できる。

$ git diff HEAD..stash@{0}

適用

適用したstashを削除する場合

stashされている内容をワーキングディレクトリに反映させた後、そのstashを削除するには下記コマンドを実行。

$ git stash pop stash@{n}
適用したstashを削除しない場合

stashされている内容をワーキングディレクトリに反映させた後、そのstashを削除しないときは下記コマンドを実行。

$ git stash apply stash@{n}

削除

stashされている内容が不要で、削除するときは下記コマンドを実行。

$ git stash drop stash@{n}

リベース

こちらの資料が非常によくまとまっている。

master取込

git merge origin/mastergit pull origin masterで済ませてしまうことが多い。
mergeと逆なので非常に注意が必要。失敗することもあるので、-iオプションを指定して、インタラクティブモードで処理をしたほうが安全だと思われる。

$ git checkout master
$ git pull origin master
$ git rebase origin origin_target

cherry-pick

git fetchを忘れずに。別のブランチでcommitされた内容をワーキングディレクトリに反映させたいときは下記コマンドを実行。

$ git cherry-pick commit_id

パッチ

パッチの扱いについて記載。

作成

git addする前に変更した内容をパッチとして作成したいときは、下記コマンドを実行。

$ git diff > branch_name.patch

適用

パッチをワーキングディレクトリに反映させるときは下記コマンドを実行。
ここでは、-p0を指定しているので、同じ階層であることに注意。

$ patch -p0 < branch_name.patch
18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18