Git コマンドメモ

Git に関するコマンドや設定方法。
やりたい内容からの逆引きでメモ化しています。


設定

特定ファイルを git の管理から外す

.gitignore ファイルを作成して配置。
外したいファイル名を記載。 .gitignore ファイルを置いたところからの相対パスで適用される。
ワイルドカード(*) も使える。

// dummy.html を管理から外す
dummy.html

// 拡張子末尾が ~ のファイルを管理から外す
*.*~

// hoge フォルダ以下のすべてのファイルを管理から外す
hoge/

特定ファイルの git の属性を変える

.gitattributes ファイルを作って配置。
{ファイル名} {アトリビュート} を記載。ファイル名にはワイルドカードも使える。

// dummy.html を管理をバイナリファイルとして扱う
dummy.html binary

// lib フォルダ以下のすべてのファイルをバイナリファイルとして扱う
lib/* binary

clone

リモートから特定のブランチを指定して clone する

git clone -b {ブランチ名} {リポジトリのurl}

ベアリポジトリ

ベアリポジトリの作成

他のユーザーもアクセスする可能性があるなら --shared をつけておく。

git init --bare

ベアリポジトリとして複製する

ベアレポジトリの状態のまま手元に持ってくるとき
外部のリポジトリの中間の受け皿としておきたい時にも使えそう。

git clone --bare {複製対象のリポジトリURL} {複製先のリポジトリ名}

空のベアリポジトリへの新規リポジトリを作成してPush

リポジトリの初期化→リモートリポジトリの追加→push 時に追従するリモートブランチの変更をセットで

git init
git commit .
git remote add origin {追加するリポジトリURL}
git push -u {リモートリポジトリ名} {branch名}
git fetch origin

コミット

空コミットをする

最初のコミットなどで特にファイルを入れずに起点を作りたいときに

git commit --allow-empty -m "{コメント}"

add

新しいファイルを追加する

git add {ファイル名}

新しいファイルを追加を取り消す

git init で初期化した直後かどうかで手法が変わる

git init による初期化直後の場合

git rm --cached -r {ファイル名}

2回目以降の git add の場合

git reset HEAD {ファイル名}

cherry-pick

一定範囲のコミットをまとめて cherry-pick する

複数のコミットをまとめて別ブランチに cherry-pick したいときに。
{始点のコミット} には、実際 cherry-pick したいコミットの1つ前を指定しなければならないことに注意。

git cherry-pick {始点のコミット}..{終点のコミット}

pull

git pull 時にコミット履歴を直線に保つ

デフォルト挙動はマージですが、たいていの場合はマージとして履歴を残す必要がなく、単に見づらくなるだけなので、こちらのコマンドを使っています。

git pull --rebase

push

push 時に追従するリモートブランチも変更する

push 時に追従する上流のリモートブランチ名を push した先に変更します。
今までと異なるリモートブランチに push して、以降はそちらのリモートブランチに追従するように変更したいときに

git push -u {リモートリポジトリ名} {branch名}

作成したブランチをリモートリポジトリに push

// ローカルのブランチ名と同じ名前で push
git push origin {branch名}

// ローカルのブランチ名と違う名前で push
git push origin {ローカルのbranch名}:{リモート上のbranch名}

ブランチ

ローカルのブランチ名を変更する

git branch -m {古いブランチ名} {新しいブランチ名}

ブランチがどのリモートブランチに追従しているかを確認する

ブランチが追従しているリモートブランチを確認する必要があるときに使います。

git branch -vv

ローカルのファイルをチェックアウトの状態に戻す

// 全体をチェックアウトの状態に戻す
git reset HEAD --hard

// hoge.cpp をチェックアウトした状態に戻す
git checkout HEAD hoge.cpp

リモートブランチからローカルに作業ブランチを作る

// リモートブランチからローカルに作業ブランチを作る
git branch {branch名} origin/{branch名}

// リモートブランチからローカルに作業ブランチを作ると同時にチェックアウト。
git checkout -b {branch名} origin/{branch名}

リモートブランチを削除する

git push origin :{branch名}
// または
git push --delete origin {branch名}

リモートブランチとローカルブランチの関連付け

git branch --set-upstream-to=origin/{リモート上のbranch名} {ローカルのbranch名}

削除したリモートブランチを表示しないようにする

git fetch --prune

タグ

タグをうつ

git tag {tag名}

タグをリモートリポジトリに push

ブランチと同様のコマンドでリモートリポジトリにタグを push できます。

git push origin {tag名}

タグをリモートリポジトリをすべて push

リモートリポジトリにタグを全部 push したい場合

git push --tags origin

リモートリポジトリのタグを削除する

ローカルでタグを削除したあと、それをリモートに空 tag を push します。

git tag -d {tag名}
git push origin :{tag名}

あるいは

git tag -d {tag名}
git push --delete origin {tag名}

リモートリポジトリあるタグ一覧を確認する

git ls-remote --tags

リモートリポジトリ

origin のさす url を確認する

(19/11/09 追記) こっちのコマンドで十分かも

git remote -v

リポジトリの移動などで、参照先の確認が必要になったときに使います。
origin の部分を別のリモートリポジトリ名にすれば、そのリモートリポジトリ名に対応した url を取得することもできます。

git config remote.origin.url

リモートリポジトリの追加

git remote add origin {追加するリポジトリURL}

リモートリポジトリの削除

リモートリポジトリを削除します。指定にはリモート名(origin等)を指定します。

git remote rm {リモート名}

origin のさす url を変更する

リポジトリの移動などで、参照先の変更が必要になったときに。
origin の部分を別のリモートリポジトリ名にすれば、そのリモートリポジトリ名に対応した url を変更することもできます。

git remote set-url origin {新しいリポジトリURL}

サブモジュール

指定したリポジトリをサブモジュールとして取り込む

空のリポジトリを取り込もうとすると失敗するので注意

git submodule add {リポジトリURL} {ディレクトリ名}

ローカルの変更とリモートをマージする

ローカルの変更はコミット済みであることが前提

git submodule update --remote --merge {ディレクトリ名}

push 前のサブモジュールも push しつつ、メインも push

git push --recurse-submodules=on-demand

サブツリー

サブツリーの追加

リモート名はあらかじめ登録しておく

git remote add {リモート名} {リポジトリURL}

その後サブツリーとして追加

git subtree add --prefix={ディレクトリ名} {リモート名} {ブランチ名}

サブツリー内のコミットを push

git subtree push --prefix={ディレクトリ名} {リモート名} {ブランチ名}

サブツリーについてリモートから pull

git subtree pull --prefix={ディレクトリ名} {リモート名} {ブランチ名}

複合的処理

指定ブランチをサブモジュールも含めて最新に更新する

これが最適解かどうかはまだテスト段階

git fetch
git checkout {ブランチ名}
git submodule update -i
git submodule foreach git fetch
git submodule foreach git checkout ${ブランチ名}


メモ一覧に戻る
メニューに戻る