プロジェクト

全般

プロフィール

Gitコマンドメモ

Gitをコマンドライン環境で使用するときのノウハウメモです。

コマンド

ローカルリポジトリ

次回コミットされる内容を見たい

$ git diff --cached

ログの一覧(1コミット1行で時間昇順)

$ git log --oneline --reverse

直前のコミットを取り消す

  • 作業ディレクトリの修正も取り消す
    $ git reset --hard HEAD^
  • 作業ディレクトリはそのままでコミットだけ取り消す
    $ git reset --soft HEAD^

直前のコミットをやり直す

コミットに漏れたファイルを追加したい、コミットメッセージを直したい、といったときは、直前のコミットを取り消すかわりにコミットをやり直すことができます。コミットメッセージだけ直すなら--amendオプション付でcommitします。追加のファイルがあるならaddしてから--amendオプション付でcommitします。

$ git commit --amend

過去のコミットで変更した内容を元に戻す(記録は残す)

過去にコミットした内容を取り消したいのですが、記録の改ざんではなく新たにその過去のコミットで変更した内容を元に戻す修正をコミットします。

$ git revert <コミット名>

ブランチを作成せずに修正したファイルをブランチを作ってコミットしたい

ブランチを作成してブランチに移動しても編集したファイルはそのまま残っています。
修正したファイルはそのままで、ブランチを作成してそのブランチに移動します。

管理対象外のディレクトリ、ファイルを削除したい

git cleanコマンドを使います。一度削除すると戻せないので、-nオプションで確認してから-fオプションで実行します。

$ git clean -n
$ git clean -f

上記コマンドでは、無視ファイル(.gitignoreで指定)やディレクトリは削除されません。
-xオプションで無視ファイルを削除対象にします。
-dオプションでディレクトリを削除対象にします。

$ git clean -x -d -n
$ git clean -x -d -f

ステージング前の修正を破棄したい

ブランチで変更した内容を破棄したいときの操作です。まだステージング(git add)していないときの操作です。

特定のファイルの変更を破棄するには

$ git checkout <ファイル名>

リポジトリすべての変更を破棄するには、リポジトリのトップディレクトリで

$ git checkout .

特定のディレクトリ以下だけ扱いたい

多数のディレクトリ/ファイル群から構成されるリポジトリにおいて、特定のディレクトリ以下だけ操作したいことがあります。Gitは、リポジトリの一部だけを切り出す(クローンする)ことはできませんが、作業ディレクトリを特定のディレクトリ以下に限定するスパースチェックアウトが可能です。

work$ git clone http://www.example.com/git/some.git
work$ cd some.git
some.git$ git config core.sparsecheckout true
some.git$ echo "path/to/deel_tihs_directory" > .git/info/sparse-checkout
some.git$ git read-tree -m -u HEAD

あとからディレクトリを追加したいときは、.git/info/sparse-checkoutファイルに追記します。

環境

認証

GitリポジトリにBASIC認証でアクセスするとき、毎回ユーザー/パスワードを入力するのは面倒

BASIC認証のhttpでリポジトリにアクセスするとき、ユーザー/パスワードを入力するのが面倒なときの回避方法です。

$HOME/.netrcにホスト、ユーザー名、パスワードを記述
machine repos.example.com
login togo
password admiral

.netrcは、パーミッションを0600にしておきます。

~$ chmod 0600 .netrc
Credential Helper(cache方式)を使用
~$ git config --global credential.helper cache

とすることで、1度入力したユーザー/パスワードを一定時間キャッシュします(デフォルト15分)。

キャッシュ時間を設定するには、次のようにタイムアウト秒数を指定します。

~$ git config --global credential.helper cache --timeout=3600

クリップボードから画像を追加 (サイズの上限: 1 GB)