あまり使わないけど,たまに使おうとすると忘れてる Git コマンド集
git 各コマンドに関する覚え書き。 思い出したら追記予定。
Submodule の作成から削除まで
Submodule の作成
Repository に別の repository sub_repo.git
を submodule として subdir
に追加する場合は以下のコマンドを実行する。
$ git submodule add sub_repo.git subdir
Submodule の初期化
Submodule を含む repository を clone してきた場合は
$ git clone repo.git
$ cd repo/subdir
$ git submodule init
$ git submodule update
または
$ git clone --recursive repo.git
で初期化できる。 これ以降, remote 側から fetch/maerge した際に submodule の参照ポイントが変更されていた場合は
$ git submodule update --init --recursive
で初期化できる1。
Submodule の更新
Submodule の remote 側の変更を pull する場合は以下のコマンドを実行する。
$ git submodule update --remote subdir
Fetch したデータを merge する場合は --merge
オプションを, rebase する場合は --rebase
オプションを付ける2。
Submodule の削除
Repository から submodule を削除する場合は以下のコマンドで削除できる。
$ git submodule deinit subdir
$ git rm subdir
Remote Repository の接続設定
Remote Repository への URI を変更する
Remote repository (通常は origin
)の接続先 URI を変更するには以下のコマンドを実行する。
$ git remote set-url origin new_repo.git
Remote Repository との接続を追加する
新たに remote repository との接続を追加する場合には以下のコマンドを実行する。
$ git remote add upstream up_repo.git
ここでは追加した remote repository に upstream
と名前をつけている。
たとえば fork した repository で作業する際に fork 元の repository の変更も取り込みたい場合などに有効である。
Remote Repository との接続を削除する
Remote repository との接続を削除する場合には以下のコマンドを実行する。
$ git remote rm upstream
Repository の分離
Repository の特定のディレクトリ subdir
を commit tree を維持したまま分離したいときの手順。
まず元の repository org_repo.git
を clone する。
$ git clone org_repo.git
Clone 元の bare repository がない場合にはローカルの repository を丸ごとどっかにコピーすればよい(commit 済みであること)。
で, clone した repository 内に入って git filter-branch
コマンドを実行する。
$ cd org_repo
$ git filter-branch --subdirectory-filter subdir HEAD
Rewrite **************************************** (999/999)
Ref 'refs/heads/master' was rewritten
このとき subdir
以下のファイル・ディレクトリが repository のトップ・ディレクトリに移動するので注意が必要である。
また,オリジナルの commit tree が refs/original/refs/heads/master
として残っているので以下のコマンドで削除する。
$ git update-ref -d refs/original/refs/heads/master
作成した repository はそのまま使うなり新しい bare repository に push するなりすればいい。
$ git remote set-url origin new_repo.git
$ git push -u origin master
元の repository に push しようとすると怒られる3。
Remote Repository の branch を削除する
GitHub とかで余計な branch を作っちゃって削除したい時。 ローカルの clone から以下の引数で push すればいいようだ。
$ git push origin :wrong-branch
commit の取り消し(しかもリモートに push しちゃった)
まず commit を完全になかったことにするには以下のコマンドを実行する。
$ git reset --hard xxxxxxx
xxxxxxx
は commit ID (ハッシュ)で,取り消すコミットの直前のものを指定する。
これを push すればいいのだが,単に push しただけではエラーになるので
$ git push -f
として強制的に push する。 これで貴方の歴史はなかったことになりました(笑) チームで管理している場合はご注意を。
commit ログの収集
タグの v0.6.0
から v0.7.0
の間の commit ログを収集する。
$ git log "--pretty=format:- %s %h" v0.6.0..v0.7.0
- Merge pull request #3 from spiegel-im-spiegel/signal-subpackage 01a70c3
- Update Document 3fe7b80
- Add signal subpackage cfff012
Merge のログは不要な場合。
$ git log "--pretty=format:- %s %h" v0.6.0..v0.7.0 | grep -v Merge
- Update Document 3fe7b80
- Add signal subpackage cfff012
Git に関するブックマーク
ついでなので,ローカルで溜め込んでいた git に関するブックマークを挙げておく。
- Git for Windows
- Git Extensions
- 【Git入門者向け】イメージで理解するGitコマンド事始め | きのこる庭
- git pull と git pull –rebase の違いって?図を交えて説明します! | KRAY Inc
- Gitのこれやめて!リスト - Qiita
- Git LFSが1.0になってGitHubで使えるようになったので試してみた - Qiita
- git-lfsは大容量のファイルを扱うもので多量のファイルを扱うものではない - Qiita
- gitで重いリポジトリをcloneするとき - webネタ (Qiita 版)
- Git - サブモジュール
- Gitのsubmoduleをお手軽に削除する - Steel Dragon 14106
- Gitリポジトリ中のサブディレクトリを別のリポジトリにする - 北海道苫小牧市出身のPGが書くブログ
- Gitリポジトリのディレクトリ構成を変えて別リポジトリにする - ごずろぐ
- Git リポジトリに上がっているファイルを履歴ごと消すには? - Qiita
- マージされてない他者のプルリクを取り込む - Qiita
- git commit時に英語でメッセージ書くためのヒントを表示する - Qiita
- 【Git】コミットに規約をつくる - Qiita
- git reset のやり方 備忘録 - Qiita
- 気をつけて!Git for Windowsにおける改行コード - Qiita :
autocrlf
の値はinput
がお勧め - git - 簡単ガイド
- Git Subtree 事始め - Qiita
- たった 8 つの alias で git を大幅にわかりやすくする - Qiita
- Git で履歴のAuthor/Emailを上書きする - Qiita
- gitレポジトリ内のディレクトリを別のgitレポジトリ以下に移動する - Qiita
- git push -f をやめて –force-with-lease を使おう - Qiita
- Gitでやらかさないための事前予防策 - Qiita
- Pull Request の指摘修正でコミットログが汚れていく問題への対処法の一案 - Qiita
- Gitでよくあるハプニングの対策とコマンドメモ - Qiita
- Git 大文字·小文字ファイル変更を差分対象の設定にする方法 - Qiita
- git cloneする時にローカルユーザーを同時に指定できるサブコマンド作ったよ! - Qiita
- VSSからGitにリポジトリ移行
- Git でよく使われるコマンドにイラストによる説明を加えて1枚のチートシートにまとめてみた(SVG画像追加) - Qiita
- .gitignoreについて - Qiita
GitHub
- githubからclone時にerror setting certificate verify locationsがでる | MemeTodo : うちでもなっていろいろ大変だった
- GitHub にパスワードとかセンシティブなファイルを push してしまったときの対処法 - Qiita : GitHub などリモートのリポジトリに上げてしまうと,とてつもなく面倒になるので,要注意
- Github のブランチ保護を使用してリスキーなマージを防止する - Qiita
- Using SSH over the HTTPS port - User Documentation
- GithubでのWeb上からのマージの仕方3種とその使いどころ - Qiita
- ECDSA鍵をGitHubで使う方法 - Qiita
- Githubでブランチ作成からプルリク作成までを自動化する - Qiita
- {{ pdf-file title=“GitHub Git Cheat Sheet” link=“https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf" }}
Git-flow and GitHub-flow
- GitHub Flow – Scott Chacon
- GitHub Flow (Japanese translation)
- A successful Git branching model » nvie.com
- git-flow cheatsheet (日本語)
- git flowとgithub flowざっくりまとめ | KentaKomai Blog
- GitHub初心者はForkしない方のPull Requestから入門しよう | qnyp blog
- Git for Windows 2.xのシステムコンフィグファイルは2つある - Qiita
- 小規模開発のgit-flowの導入を楽にするブランチルールと拡張スクリプト配布 - Qiita