プロジェクト

全般

プロフィール

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 branch
  • ローカルリポジトリのブランチ名、ハッシュ、コミットコメント(1行目)の一覧を表示
    $ git branch -v

ブランチ作成

ブランチ名を指定して新しいブランチを作成します。以下のコマンドは、ブランチを作成しますが、切り替えはしません。

$ git branch <ブランチ名>

ブランチの作成と切り替えを一緒に実行する場合は次のコマンドを実行します。

$ git checkout -b <ブランチ名>

ブランチ切り替え

$ git checkout <ブランチ名>

コミットハッシュを表示

% git rev-parse HEAD
3a53e9b1c79ce25ea6e1e8423bf283230065e284

% git rev-parse --short HEAD
3a53e9b

リモートリポジトリ

ローカルで作成したブランチをリモートに上げるには(初回)

ローカルで新たに設けたブランチをリモートリポジトリに上げるには、最初は次のようにブランチ名を指定します。

some.git$ git push origin some_branch

ブランチ名を指定するのが面倒な場合は、ブランチ名の代わりにHEADを指定することができます。
some.git$ git push HEAD

ローカルのブランチにリモートブランチの更新を取り込む(git pull)

ローカルのブランチは更新なく、リモートブランチの更新を取り込む場合、git pullで取り込みます。

ローカルのブランチを更新しており、リモートブランチにも別な更新があり、両者の更新を整合する場合は、git pullを実行するとデフォルトでは警告が発生します。
警告を回避するには、git pullで両者の更新の整合を、merge、rebase、first forward onlyの3つから明示的に指定するか、あらかじめどれを使用するか設定をしておきます。なお、first forward onlyはこのケースでは適用できないので実質、mergeかrebaseの選択となります。以前のGitはデフォルトでmergeが選択されていたので警告が発生しませんでしたが、最近の仕様でデフォルトが無指定になっています。

環境

認証

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


3ヶ月前に更新