└── README.md /README.md: -------------------------------------------------------------------------------- 1 | ## git-tips 2 | > [git-tips](http://git.io/git-tips)が本家です。 3 | 4 | [English](http://git.io/git-tips) | [中文](https://github.com/521xueweihan/git-tips) | [Русский](https://github.com/Imangazaliev/git-tips) | [한국어](https://github.com/mingrammer/git-tips) | [Tiếng Việt](https://github.com/hprobotic/git-tips) 5 | 6 | ### __ツール:__ 7 | 8 | [git-tip](https://www.npmjs.com/package/git-tip) -以下に紹介するtipsを実際に試すことができるCLIツールです。 ([Here in Docker container](https://github.com/djoudi5/docker-git-tip)) 9 | > tipsを追加したい場合は[contributing.md](./contributing.md)を確認してください。 10 | 11 | P.S: `git version 2.7.4 (Apple Git-66)`で動作検証をしています。 12 | 13 | 14 | 15 | * [GIT公式の基本的なコマンドのサンプルを表示する](#GIT公式の基本的なコマンドのサンプルを表示する) 16 | * [GIT公式のヘルプを表示する](#GIT公式のヘルプを表示する) 17 | * [コミットメッセージからコミットを検索する](#コミットメッセージからコミットを検索する) 18 | * [リモートブランチと同期してローカルの変更を上書きする](#リモートブランチと同期してローカルの変更を上書きする) 19 | * [特定のコミット時点で管理されている全ファイルを表示する](#特定のコミット時点で管理されている全ファイルを表示する) 20 | * [ファーストコミットを取り消す](#ファーストコミットを取り消す) 21 | * [全てのコンフリクトしているファイルを表示する](#全てのコンフリクトしているファイルを表示する) 22 | * [特定のコミットで変更されたファイルを表示する](#特定のコミットで変更されたファイルを表示する) 23 | * [最終コミットからステージングされていない変更を表示する](#最終コミットからステージングされていない変更を表示する) 24 | * [コミット対象のステージングされている変更を表示する](#コミット対象のステージングされている変更を表示する) 25 | * [ステージングされている変更とされていない変更の両方を表示する](#ステージングされている変更とされていない変更の両方を表示する) 26 | * [masterにマージ済みのブランチを表示する](#masterにマージ済みのブランチを表示する) 27 | * [前にいたブランチに素早く移動する](#前にいたブランチに素早く移動する) 28 | * [masterにマージ済みのブランチを削除する](#masterにマージ済みのブランチを削除する) 29 | * [全てのブランチとその親ブランチを最新のコミットと共に表示する](#全てのブランチとその親ブランチを最新のコミットと共に表示する) 30 | * [どのリモートブランチを追跡するか選択する](#どのリモートブランチを追跡するか選択する) 31 | * [ローカルブランチを削除する](#ローカルブランチを削除する) 32 | * [リモートブランチを削除する](#リモートブランチを削除する) 33 | * [ローカルタグを削除する](#ローカルタグを削除する) 34 | * [リモートタグを削除する](#リモートタグを削除する) 35 | * [ローカルで変更したファイルをHEADまで戻す](#ローカルで変更したファイルをHEADまで戻す) 36 | * [正反対のコミットを作ることで、元のコミットを取り消す](#正反対のコミットを作ることで、元のコミットを取り消す) 37 | * [コミットを破棄する。ローカルブランチのみで行うことを推奨](#コミットを破棄する。ローカルブランチのみで行うことを推奨) 38 | * [直前のコミットのコメントを変更する](#直前のコミットのコメントを変更する) 39 | * [現在のブランチのコミット履歴を表示する](#現在のブランチのコミット履歴を表示する) 40 | * [直前のコミットの実行者を変更する](#直前のコミットの実行者を変更する) 41 | * [直前のコミットの実行者をデフォルト値にリセットする](#直前のコミットの実行者をデフォルト値にリセットする) 42 | * [リモートブランチのURLを変更する](#リモートブランチのURLを変更する) 43 | * [現在設定されている全てのリモートブランチを表示する](#現在設定されている全てのリモートブランチを表示する) 44 | * [ローカルとリモートの全部ランチを表示する](#ローカルとリモートの全部ランチを表示する) 45 | * [リモートのブランチを表示する](#リモートのブランチを表示する) 46 | * [ファイル全体ではなく、ファイル中の一部変更点だけをステージングする](#ファイル全体ではなく、ファイル中の一部変更点だけをステージングする) 47 | * [GITの補完機能をインストールする](#GITの補完機能をインストールする) 48 | * [直近2週間の変更点を表示する](#直近2週間の変更点を表示する) 49 | * [masterからforkした時点よりあとのコミット履歴を表示](#masterからforkした時点よりあとのコミット履歴を表示) 50 | * [コミットを別のブランチにcherry-pickする](#コミットを別のブランチにcherry-pickする) 51 | * [特定のコミットが含まれているブランチを表示する](#特定のコミットが含まれているブランチを表示する) 52 | * [エイリアスを作成する](#エイリアスを作成する) 53 | * [前回コミットからの変更を一時保存する](#前回コミットからの変更を一時保存する) 54 | * [前回コミットからの変更のうち、ステージングされていない変更を一時保存する](#前回コミットからの変更のうち、ステージングされていない変更を一時保存する) 55 | * [前回コミットからの変更をGit管理されていないファイルの変更も含めて一時保存する](#前回コミットからの変更をGit管理されていないファイルの変更も含めて一時保存する) 56 | * [前回コミットからの変更を名前をつけて一時保存する](#前回コミットからの変更を名前をつけて一時保存する) 57 | * [前回コミットからの変更を全て一時保存する(ignoredしている、Git管理されていない、Git管理されている)](#前回コミットからの変更を全て一時保存する(ignoredしている、Git管理されていない、Git管理されている)) 58 | * [現在保存されているstashを表示する](#現在保存されているstashを表示する) 59 | * [stashリストから削除せずに変更を適用する](#stashリストから削除せずに変更を適用する) 60 | * [最後のstashを適用し、適用したstashは削除する](#適用したstashは削除する) 61 | * [stashを全て削除する](#stashを全て削除する) 62 | * [stashから1ファイルだけ取り出す](#stashから1ファイルだけ取り出す) 63 | * [Git管理しているファイルを全て表示する](#Git管理しているファイルを全て表示する) 64 | * [Git管理していないファイルを全て表示する](#show-all-untracked-files) 65 | * [Gitignoreで無視しているファイルを全て表示する](#Gitignoreで無視しているファイルを全て表示する) 66 | * [リポジトリーからワーキングツリーを作成する(Git2.5)](#リポジトリーからワーキングツリーを作成する(Git2.5)) 67 | * [HEADからワーキングツリーを作成する](#HEADからワーキングツリーを作成する) 68 | * [ファイルをGit管理下から外す。ファイルは削除しない](#ファイルをGit管理下から外す。ファイルは削除しない) 69 | * [Git管理していないファイル/ディレクトリを削除する前に、ドライランで削除される対象を表示する](#Git管理していないファイル/ディレクトリを削除する前に、ドライランで削除される対象を表示する) 70 | * [Git管理していないファイルを強制削除する](#Git管理していないファイルを強制削除する) 71 | * [Git管理していないディレクトリーを強制削除する](#Git管理していないディレクトリーを強制削除する) 72 | * [全てのサブモジュールをアップデートする](#全てのサブモジュールをアップデートする) 73 | * [現在のブランチでmasterにマージされていないコミットを表示する](#現在のブランチでmasterにマージされていないコミットを表示する) 74 | * [ブランチ名を変更する](#ブランチ名を変更する) 75 | * [featureブランチをmasterにrebaseして、その後masterにマージする](#featureブランチをmasterにrebaseして、その後masterにマージする) 76 | * [masterブランチをアーカイブする](#masterブランチをアーカイブする) 77 | * [前回のコミットをメッセージを除いて変更する](#前回のコミットをメッセージを除いて変更する) 78 | * [リモートブランチで削除されているブランチへの参照を取り除く](#リモートブランチで削除されているブランチへの参照を取り除く) 79 | * [一番最初のコミットのハッシュを取得する](#一番最初のコミットのハッシュを取得する) 80 | * [バージョンツリーを描画する](#バージョンツリーを描画する) 81 | * [reflogsから参照されているコミットを含めてバージョンツリーを描画する](#reflogsから参照されているコミットを含めてバージョンツリーを描画する) 82 | * [指定したサブツリーだけをoriginにpushする](#指定したサブツリーだけをoriginにpushする) 83 | * [サブツリーを現在のリポジトリに追加する](#サブツリーを現在のリポジトリに追加する) 84 | * [指定したサブツリーだけをpullする](#指定したサブツリーだけをpullする) 85 | * [指定したブランチをファイルに出力する](#指定したブランチをファイルに出力する) 86 | * [バンドルからインポートする](#バンドルからインポートする) 87 | * [現在のブランチ名を表示する](#現在のブランチ名を表示する) 88 | * [コミット時に特定の1ファイルだけ無視する (e.g. Changelog)](#コミット時に特定の1ファイルだけ無視する-(e.g.-Changelog)) 89 | * [rebaseする前にstashする](#rebaseする前にstashする) 90 | * [プルリクエストをID指定でローカルブランチにfetchする](#プルリクエストをID指定でローカルブランチにfetchする) 91 | * [現在のブランチの一番直近のタグを表示する](#現在のブランチの一番直近のタグを表示する) 92 | * [単語単位のdiffを表示する](#単語単位のdiffを表示する) 93 | * [一般的なdiffツールで変更を表示する](#一般的なdiffツールで変更を表示する) 94 | * [Git管理しているファイルの変更を無視する](#Git管理しているファイルの変更を無視する) 95 | * [assume-unchangedを無効にする](#unchangedを無効にする) 96 | * [.gitignoreに記載があるファイルを削除する](#.Gitignoreに記載があるファイルを削除する) 97 | * [削除したファイルを元に戻す](#削除したファイルを元に戻す) 98 | * [特定のコミットハッシュまでファイルを戻す](#特定のコミットハッシュまでファイルを戻す) 99 | * [pullしたときにmergeではなくrebaseするよう変更する](#pullしたときにmergeではなくrebaseするよう変更する) 100 | * [全てのコンフィグとエイリアスの一覧を表示する](#全てのコンフィグとエイリアスの一覧を表示する) 101 | * [ファイル名の大文字小文字変更を検知するように変更する](#ファイル名の大文字小文字変更を検知するように変更する) 102 | * [カスタムエディターを追加する](#カスタムエディターを追加する) 103 | * [誤字を自動修正する](#誤字を自動修正する) 104 | * [指定のハッシュが、どのブランチにいるかを表示する](#指定のハッシュが、どのブランチにいるかを表示する) 105 | * [ドライラン(ドライランをサポートしているコマンドに対して実行できる)](#ドライラン(ドライランをサポートしているコマンドに対して実行できる)) 106 | * [コミットを前回のコミットの修正としてマークする](#コミットを前回のコミットの修正としてマークする) 107 | * [rebase時に上記のコミット順を隣に並べ替えてわかりやすくする](#rebase時に上記のコミット順を隣に並べ替えてわかりやすくする) 108 | * [指定したファイルだけコミットする](#指定したファイルだけコミットする) 109 | * [インタラクティブにステージングする](#インタラクティブにステージングする) 110 | * [Gitが無視しているファイルを表示する](#Gitが無視しているファイルを表示する) 111 | * [Gitが無視しているファイルのステータスを表示する](#Gitが無視しているファイルのステータスを表示する) 112 | * [Branch1には入っていて、Branch2に入っていないコミットを表示する](#Branch1には入っていて、Branch2に入っていないコミットを表示する) 113 | * [直近n個のコミットログを表示する](#直近n個のコミットログを表示する) 114 | * [コンフリクトの解決法を記録してお、今後同じ理由でのコンフリクトが見つかったら同じ方法で自動的に解決する](#コンフリクトの解決法を記録してお、今後同じ理由でのコンフリクトが見つかったら同じ方法で自動的に解決する) 115 | * [コンフリクトしたファイルをエディタで開く](#コンフリクトしたファイルをエディタで開く) 116 | * [現在のプロジェクトが使用しているオブジェクト数とディスク使用量を表示する](#現在のプロジェクトが使用しているオブジェクト数とディスク使用量を表示する) 117 | * [到達不能オブジェクトを削除する](#到達不能オブジェクトを削除する) 118 | * [作業リポジトリを gitwebで一時的にブラウジングする](#作業リポジトリを-gitwebで一時的にブラウジングする) 119 | * [コミットログで署名も表示する](#コミットログで署名も表示する) 120 | * [グローバル設定を削除する](#グローバル設定を削除する) 121 | * [履歴を持たない新しい空ブランチを作成する](#履歴を持たない新しい空ブランチを作成する) 122 | * [別ブランチのファイルを表示する](#別ブランチのファイルを表示する) 123 | * [ルートとマージコミットのみ表示する](#ルートとマージコミットのみ表示する) 124 | * [直前の2コミットをインタラクティブにrebaseする](#直前の2コミットをインタラクティブにrebaseする) 125 | * [作業中のブランチを表示する](#作業中のブランチを表示する) 126 | * [二分探索でバグの発生元を発見する](#二分探索でバグの発生元を発見する) 127 | * [pre-commitフックが仕掛けられているときに、チェックをスルーしてコミットする](#pre-commitフックが仕掛けられているときに、チェックをスルーしてコミットする) 128 | * [特定のファイルの変更履歴を表示する (リネームされていても)](#特定のファイルの変更履歴を表示する-(リネームされていても)) 129 | * [特定のブランチをクローンする](#特定のブランチをクローンする) 130 | * [新しいブランチを作って移動する](#新しいブランチを作って移動する) 131 | * [コミット時にファイルモードの変更を無視する](#コミット時にファイルモードの変更を無視する) 132 | * [ターミナルの出力に色を付けない](#ターミナルの出力に色を付けない) 133 | * [ターミナルの出力の色設定を個別に変更する](#ターミナルの出力の色設定を個別に変更する) 134 | * [ローカルブランチを新しい順に表示する](#ローカルブランチを新しい順に表示する) 135 | * [文字列か正規表現でGit管理下のファイルの行を検索する](#文字列か正規表現でGit管理下のファイルの行を検索する) 136 | * [最新のリポジトリだけcloneする](#最新のリポジトリだけcloneする) 137 | * [指定の文字で全てのブランチのコミットログを検索する](#指定の文字で全てのブランチのコミットログを検索する) 138 | * [masterから指定のブランチに向けての最初のコミットを表示する](#masterから指定のブランチに向けての最初のコミットを表示する) 139 | * [ステージングしたファイルをステージングする前に戻す](#ステージングしたファイルをステージングする前に戻す) 140 | * [リモートリポジトリに強制的にpushする](#リモートリポジトリに強制的にpushする) 141 | * [リモートリポジトリを追加する](#リモートリポジトリを追加する) 142 | * [ファイルの全行に対して、最終更新日と更新者を表示する](#ファイルの全行に対して、最終更新日と更新者を表示する) 143 | * [ユーザ毎のコミット回数とメッセージを一覧表示する](#ユーザ毎のコミット回数とメッセージを一覧表示する) 144 | * [誰かの作業を上書きしない場合、リモートに強制的にpushする](#誰かの作業を上書きしない場合、リモートに強制的にpushする) 145 | * [ユーザが貢献した行数を表示する](#ユーザが貢献した行数を表示する) 146 | * [全てのマージをリバートする](#全てのマージをリバートする) 147 | * [ブランチのコミット回数を表示する](#ブランチのコミット回数を表示する) 148 | * [エイリアス git undo](#エイリアス-git-undo) 149 | * [オブジェクトノートを追加する](#オブジェクトノートを追加する) 150 | * [全てのオブジェクトノートを表示する](#全てのオブジェクトノートを表示する) 151 | * [別のリポジトリからコミットを適用する](#別のリポジトリからコミットを適用する) 152 | * [特定のリモートブランチからfetchする](#特定のリモートブランチからfetchする) 153 | * [2つのブランチから共通の祖先を見付ける](#2つのブランチから共通の祖先を見付ける) 154 | * [pushしてないコミットを表示する](#pushしてないコミットを表示する) 155 | * [空白以外の変更をapplyする](#空白以外の変更をapplyする) 156 | * [ローカル/グローバルのgitコンフィグを編集する](#ローカル/グローバルのGitコンフィグを編集する) 157 | * [指定範囲内をblameする](#指定範囲内をblameする) 158 | * [Git変数を表示する](#Git変数を表示する) 159 | * [整形済みのパッチを作成する](#整形済みのパッチを作成する) 160 | * [リポジトリのルート絶対パスを取得する](#リポジトリのルート絶対パスを取得する) 161 | * [特定期間のログを表示する](#特定期間のログを表示する) 162 | * [指定者以外のログを表示する](#指定者以外のログを表示する) 163 | * [ペンディング中の変更のまとめを作成](#ペンディング中の変更のまとめを作成) 164 | * [リモートリポジトリのブランチを表示する](#リモートリポジトリのブランチを表示する) 165 | * [Git管理していないファイルをバックアップする](#Git管理していないファイルをバックアップする) 166 | * [エイリアスを一覧表示する](#エイリアスを一覧表示する) 167 | * [git statusを簡潔に表示する](#git-statusを簡潔に表示する) 168 | * [昨日のコミットをチェックアウトする](#昨日のコミットをチェックアウトする) 169 | * [ローカルブランチをリモートリポジトリにpushして追跡する](#ローカルブランチをリモートリポジトリにpushして追跡する) 170 | * [ブランチのベースを変更する](#ブランチのベースを変更する) 171 | * [HTTPsではなくSSHをリモートへの接続に使用する](#HTTPsではなくSSHをリモートへの接続に使用する) 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | ## Git公式の基本的なコマンドのサンプルを表示する 180 | ```sh 181 | git help everyday 182 | ``` 183 | 184 | ## Git公式のヘルプを表示する 185 | ```sh 186 | git help -g 187 | ``` 188 | 189 | ## コミットメッセージからコミットを検索する 190 | ```sh 191 | git log -S'' 192 | ``` 193 | 194 | ## リモートブランチと同期してローカルの変更を上書きする 195 | ```sh 196 | git fetch origin && git reset --hard origin/master && git clean -f -d 197 | ``` 198 | 199 | ## 特定のコミット時点で管理されている全ファイルを表示する 200 | ```sh 201 | git ls-tree --name-only -r 202 | ``` 203 | 204 | ## ファーストコミットを取り消す 205 | ```sh 206 | git update-ref -d HEAD 207 | ``` 208 | 209 | ## 全てのコンフリクトしているファイルを表示する 210 | ```sh 211 | git diff --name-only --diff-filter=U 212 | ``` 213 | 214 | ## 特定のコミットで変更されたファイルを表示する 215 | ```sh 216 | git diff-tree --no-commit-id --name-only -r 217 | ``` 218 | 219 | ## 最終コミットからステージングされていない変更を表示する 220 | ```sh 221 | git diff 222 | ``` 223 | 224 | ## コミット対象のステージングされている変更を表示する 225 | ```sh 226 | git diff --cached 227 | ``` 228 | 229 | 230 | __その他の方法:__ 231 | ```sh 232 | git diff --staged 233 | ``` 234 | 235 | ## ステージングされている変更とされていない変更の両方を表示する 236 | ```sh 237 | git diff HEAD 238 | ``` 239 | 240 | ## masterにマージ済みのブランチを表示する 241 | ```sh 242 | git branch --merged master 243 | ``` 244 | 245 | ## 前にいたブランチに素早く移動する 246 | ```sh 247 | git checkout - 248 | ``` 249 | 250 | 251 | __その他の方法:__ 252 | ```sh 253 | git checkout @{-1} 254 | ``` 255 | 256 | ## masterにマージ済みのブランチを削除する 257 | ```sh 258 | git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d 259 | ``` 260 | 261 | 262 | __その他の方法:__ 263 | ```sh 264 | git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out 265 | ``` 266 | 267 | ## 全てのブランチとその親ブランチを最新のコミットと共に表示する 268 | ```sh 269 | git branch -vv 270 | ``` 271 | 272 | ## どのリモートブランチを追跡するか選択する 273 | ```sh 274 | git branch -u origin/mybranch 275 | ``` 276 | 277 | ## ローカルブランチを削除する 278 | ```sh 279 | git branch -d 280 | ``` 281 | 282 | ## リモートブランチを削除する 283 | ```sh 284 | git push origin --delete 285 | ``` 286 | 287 | 288 | __その他の方法:__ 289 | ```sh 290 | git push origin : 291 | ``` 292 | 293 | ## ローカルタグを削除する 294 | ```sh 295 | git tag -d 296 | ``` 297 | 298 | ## リモートタグを削除する 299 | ```sh 300 | git push origin :refs/tags/ 301 | ``` 302 | 303 | ## ローカルで変更したファイルをHEADまで戻す 304 | ```sh 305 | git checkout -- 306 | ``` 307 | 308 | ## 正反対のコミットを作ることで、元のコミットを取り消す 309 | ```sh 310 | git revert 311 | ``` 312 | 313 | ## コミットを破棄する。ローカルブランチのみで行うことを推奨 314 | ```sh 315 | git reset 316 | ``` 317 | 318 | ## 直前のコミットのコメントを変更する 319 | ```sh 320 | git commit -v --amend 321 | ``` 322 | 323 | ## 現在のブランチのコミット履歴を表示する 324 | ```sh 325 | git cherry -v master 326 | ``` 327 | 328 | ## 直前のコミットの実行者を変更する 329 | ```sh 330 | git commit --amend --author='Author Name ' 331 | ``` 332 | 333 | ## 直前のコミットの実行者をデフォルト値にリセットする 334 | ```sh 335 | git commit --amend --reset-author --no-edit 336 | ``` 337 | 338 | ## リモートブランチのURLを変更する 339 | ```sh 340 | git remote set-url origin 341 | ``` 342 | 343 | ## 現在設定されている全てのリモートブランチを表示する 344 | ```sh 345 | git remote 346 | ``` 347 | 348 | 349 | __その他の方法:__ 350 | ```sh 351 | git remote show 352 | ``` 353 | 354 | ## ローカルとリモートの全部ランチを表示する 355 | ```sh 356 | git branch -a 357 | ``` 358 | 359 | ## リモートのブランチを表示する 360 | ```sh 361 | git branch -r 362 | ``` 363 | 364 | ## ファイル全体ではなく、ファイル中の一部変更点だけをステージングする 365 | ```sh 366 | git add -p 367 | ``` 368 | 369 | ## gitの補完機能をインストールする 370 | ```sh 371 | curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc 372 | ``` 373 | 374 | ## 直近2週間の変更点を表示する 375 | ```sh 376 | git log --no-merges --raw --since='2 weeks ago' 377 | ``` 378 | 379 | 380 | __その他の方法:__ 381 | ```sh 382 | git whatchanged --since='2 weeks ago' 383 | ``` 384 | 385 | ## masterからforkした時点よりあとのコミット履歴を表示 386 | ```sh 387 | git log --no-merges --stat --reverse master.. 388 | ``` 389 | 390 | ## コミットを別のブランチにcherry-pickする 391 | ```sh 392 | git checkout && git cherry-pick 393 | ``` 394 | 395 | ## 特定のコミットが含まれているブランチを表示する 396 | ```sh 397 | git branch -a --contains 398 | ``` 399 | 400 | 401 | __その他の方法:__ 402 | ```sh 403 | git branch --contains 404 | ``` 405 | 406 | ## エイリアスを作成する 407 | ```sh 408 | git config --global alias. 409 | git config --global alias.st status 410 | ``` 411 | 412 | ## 前回コミットからの変更を一時保存する 413 | ```sh 414 | git stash 415 | ``` 416 | 417 | 418 | __その他の方法:__ 419 | ```sh 420 | git stash save 421 | ``` 422 | 423 | ## 前回コミットからの変更のうち、ステージングされていない変更を一時保存する 424 | ```sh 425 | git stash -k 426 | ``` 427 | 428 | 429 | __その他の方法:__ 430 | ```sh 431 | git stash --keep-index 432 | ``` 433 | 434 | 435 | ```sh 436 | git stash save --keep-index 437 | ``` 438 | 439 | ## 前回コミットからの変更をgit管理されていないファイルの変更も含めて一時保存する 440 | ```sh 441 | git stash -u 442 | ``` 443 | 444 | 445 | __その他の方法:__ 446 | ```sh 447 | git stash save -u 448 | ``` 449 | 450 | 451 | ```sh 452 | git stash save --include-untracked 453 | ``` 454 | 455 | ## 前回コミットからの変更を名前をつけて一時保存する 456 | ```sh 457 | git stash save 458 | ``` 459 | 460 | ## 前回コミットからの変更を全て一時保存する(ignoredしている、git管理されていない、git管理されている) 461 | ```sh 462 | git stash -a 463 | ``` 464 | 465 | 466 | __その他の方法:__ 467 | ```sh 468 | git stash --all 469 | ``` 470 | 471 | 472 | ```sh 473 | git stash save --all 474 | ``` 475 | 476 | ## 現在保存されているstashを表示する 477 | ```sh 478 | git stash list 479 | ``` 480 | 481 | ## stashリストから削除せずに変更を適用する 482 | ```sh 483 | git stash apply 484 | ``` 485 | 486 | ## 最後のstashを適用し、適用したstashは削除する 487 | ```sh 488 | git stash pop 489 | ``` 490 | 491 | 492 | __その他の方法:__ 493 | ```sh 494 | git stash apply stash@{0} && git stash drop stash@{0} 495 | ``` 496 | 497 | ## stashを全て削除する 498 | ```sh 499 | git stash clear 500 | ``` 501 | 502 | 503 | __その他の方法:__ 504 | ```sh 505 | git stash drop 506 | ``` 507 | 508 | ## stashから1ファイルだけ取り出す 509 | ```sh 510 | git checkout -- 511 | ``` 512 | 513 | 514 | __その他の方法:__ 515 | ```sh 516 | git checkout stash@{0} -- 517 | ``` 518 | 519 | ## Git管理しているファイルを全て表示する 520 | ```sh 521 | git ls-files -t 522 | ``` 523 | 524 | ## Git管理していないファイルを全て表示する 525 | ```sh 526 | git ls-files --others 527 | ``` 528 | 529 | ## gitignoreで無視しているファイルを全て表示する 530 | ```sh 531 | git ls-files --others -i --exclude-standard 532 | ``` 533 | 534 | ## リポジトリーからワーキングツリーを作成する(Git2.5) 535 | ```sh 536 | git worktree add -b 537 | ``` 538 | 539 | ## HEADからワーキングツリーを作成する 540 | ```sh 541 | git worktree add --detach HEAD 542 | ``` 543 | 544 | ## ファイルをGit管理下から外す。ファイルは削除しない 545 | ```sh 546 | git rm --cached 547 | ``` 548 | 549 | 550 | __その他の方法:__ 551 | ```sh 552 | git rm --cached -r 553 | ``` 554 | 555 | ## Git管理していないファイル/ディレクトリを削除する前に、ドライランで削除される対象を表示する 556 | ```sh 557 | git clean -n 558 | ``` 559 | 560 | ## Git管理していないファイルを強制削除する 561 | ```sh 562 | git clean -f 563 | ``` 564 | 565 | ## Git管理していないディレクトリーを強制削除する 566 | ```sh 567 | git clean -f -d 568 | ``` 569 | 570 | ## 全てのサブモジュールをアップデートする 571 | ```sh 572 | git submodule foreach git pull 573 | ``` 574 | 575 | 576 | __その他の方法:__ 577 | ```sh 578 | git submodule update --init --recursive 579 | ``` 580 | 581 | 582 | ```sh 583 | git submodule update --remote 584 | ``` 585 | 586 | ## 現在のブランチでmasterにマージされていないコミットを表示する 587 | ```sh 588 | git cherry -v master 589 | ``` 590 | 591 | 592 | __その他の方法:__ 593 | ```sh 594 | git cherry -v master 595 | ``` 596 | 597 | ## ブランチ名を変更する 598 | ```sh 599 | git branch -m 600 | ``` 601 | 602 | 603 | __その他の方法:__ 604 | ```sh 605 | git branch -m [] 606 | ``` 607 | 608 | ## featureブランチをmasterにrebaseして、その後masterにマージする 609 | ```sh 610 | git rebase master feature && git checkout master && git merge - 611 | ``` 612 | 613 | ## masterブランチをアーカイブする 614 | ```sh 615 | git archive master --format=zip --output=master.zip 616 | ``` 617 | 618 | ## 前回のコミットをメッセージを除いて変更する 619 | ```sh 620 | git add --all && git commit --amend --no-edit 621 | ``` 622 | 623 | ## リモートブランチで削除されているブランチへの参照を取り除く 624 | ```sh 625 | git fetch -p 626 | ``` 627 | 628 | 629 | __その他の方法:__ 630 | ```sh 631 | git remote prune origin 632 | ``` 633 | 634 | ## 一番最初のコミットのハッシュを取得する 635 | ```sh 636 | git rev-list --reverse HEAD | head -1 637 | ``` 638 | 639 | 640 | __その他の方法:__ 641 | ```sh 642 | git rev-list --max-parents=0 HEAD 643 | ``` 644 | 645 | 646 | ```sh 647 | git log --pretty=oneline | tail -1 | cut -c 1-40 648 | ``` 649 | 650 | 651 | ```sh 652 | git log --pretty=oneline --reverse | head -1 | cut -c 1-40 653 | ``` 654 | 655 | ## バージョンツリーを描画する 656 | ```sh 657 | git log --pretty=oneline --graph --decorate --all 658 | ``` 659 | 660 | 661 | __その他の方法:__ 662 | ```sh 663 | gitk --all 664 | ``` 665 | 666 | 667 | ```sh 668 | git log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d' 669 | ``` 670 | 671 | ## reflogsから参照されているコミットを含めてバージョンツリーを描画する 672 | ```sh 673 | git log --graph --decorate --oneline $(git rev-list --walk-reflogs --all) 674 | ``` 675 | 676 | ## 指定したサブツリーだけをoriginにpushする 677 | ```sh 678 | git subtree push --prefix subfolder_name origin gh-pages 679 | ``` 680 | 681 | ## サブツリーを現在のリポジトリに追加する 682 | ```sh 683 | git subtree add --prefix=/ --squash git@github.com:/.git master 684 | ``` 685 | 686 | ## 指定したサブツリーだけをpullする 687 | ```sh 688 | git subtree pull --prefix=/ --squash git@github.com:/.git master 689 | ``` 690 | 691 | ## 指定したブランチをファイルに出力する 692 | ```sh 693 | git bundle create 694 | ``` 695 | 696 | ## バンドルからインポートする 697 | ```sh 698 | git clone repo.bundle -b 699 | ``` 700 | 701 | ## 現在のブランチ名を表示する 702 | ```sh 703 | git rev-parse --abbrev-ref HEAD 704 | ``` 705 | 706 | ## コミット時に特定の1ファイルだけ無視する (e.g. Changelog) 707 | ```sh 708 | git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog 709 | ``` 710 | 711 | ## rebaseする前にstashする 712 | ```sh 713 | git rebase --autostash 714 | ``` 715 | 716 | ## rebaseする前にstashする 717 | ```sh 718 | git fetch origin pull//head: 719 | ``` 720 | 721 | 722 | __その他の方法:__ 723 | ```sh 724 | git pull origin pull//head: 725 | ``` 726 | 727 | ## 現在のブランチの一番直近のタグを表示する 728 | ```sh 729 | git describe --tags --abbrev=0 730 | ``` 731 | 732 | ## 単語単位のdiffを表示する 733 | ```sh 734 | git diff --word-diff 735 | ``` 736 | 737 | ## 一般的なdiffツールで変更を表示する 738 | ```sh 739 | git difftool [-t ] 740 | ``` 741 | 742 | ## Git管理しているファイルの変更を無視する 743 | ```sh 744 | git update-index --assume-unchanged 745 | ``` 746 | 747 | ## unchangedを無効にする 748 | ```sh 749 | git update-index --no-assume-unchanged 750 | ``` 751 | 752 | ## .gitignoreに記載があるファイルを削除する 753 | ```sh 754 | git clean -X -f 755 | ``` 756 | 757 | ## 削除したファイルを元に戻す 758 | ```sh 759 | git checkout ^ -- 760 | ``` 761 | 762 | ## 特定のコミットハッシュまでファイルを戻す 763 | ```sh 764 | git checkout -- 765 | ``` 766 | 767 | ## pullしたときにmergeではなくrebaseするよう変更する 768 | ```sh 769 | git config --global pull.rebase true 770 | ``` 771 | 772 | 773 | __その他の方法:__ 774 | ```sh 775 | #git < 1.7.9 776 | git config --global branch.autosetuprebase always 777 | ``` 778 | 779 | ## 全てのコンフィグとエイリアスの一覧を表示する 780 | ```sh 781 | git config --list 782 | ``` 783 | 784 | ## ファイル名の大文字小文字変更を検知するように変更する 785 | ```sh 786 | git config --global core.ignorecase false 787 | ``` 788 | 789 | ## カスタムエディターを追加する 790 | ```sh 791 | git config --global core.editor '$EDITOR' 792 | ``` 793 | 794 | ## 誤字を自動修正する 795 | ```sh 796 | git config --global help.autocorrect 1 797 | ``` 798 | 799 | ## どのブランチにいるかを表示する 800 | ```sh 801 | git name-rev --name-only 802 | ``` 803 | 804 | ## ドライラン(ドライランをサポートしているコマンドに対して実行できる) 805 | ```sh 806 | git clean -fd --dry-run 807 | ``` 808 | 809 | ## コミットを前回のコミットの修正としてマークする 810 | ```sh 811 | git commit --fixup 812 | ``` 813 | 814 | ## rebase時に上記のコミット順を隣に並べ替えてわかりやすくする 815 | ```sh 816 | git rebase -i --autosquash 817 | ``` 818 | 819 | ## 指定したファイルだけコミットする 820 | ```sh 821 | git commit --only 822 | ``` 823 | 824 | ## インタラクティブにステージングする 825 | ```sh 826 | git add -i 827 | ``` 828 | 829 | ## Gitが無視しているファイルを表示する 830 | ```sh 831 | git check-ignore * 832 | ``` 833 | 834 | ## Gitが無視しているファイルのステータスを表示する 835 | ```sh 836 | git status --ignored 837 | ``` 838 | 839 | ## Branch1には入っていて、Branch2に入っていないコミットを表示する 840 | ```sh 841 | git log Branch1 ^Branch2 842 | ``` 843 | 844 | ## 直近n個のコミットログを表示する 845 | ```sh 846 | git log - 847 | ``` 848 | 849 | 850 | __その他の方法:__ 851 | ```sh 852 | git log -n 853 | ``` 854 | 855 | ## コンフリクトの解決法を記録してお、今後同じ理由でのコンフリクトが見つかったら同じ方法で自動的に解決する 856 | ```sh 857 | git config --global rerere.enabled 1 858 | ``` 859 | 860 | ## コンフリクトしたファイルをエディタで開く 861 | ```sh 862 | git diff --name-only | uniq | xargs $EDITOR 863 | ``` 864 | 865 | ## 現在のプロジェクトが使用しているオブジェクト数とディスク使用量を表示する 866 | ```sh 867 | git count-objects --human-readable 868 | ``` 869 | 870 | ## 到達不能オブジェクトを削除する 871 | ```sh 872 | git gc --prune=now --aggressive 873 | ``` 874 | 875 | ## 作業リポジトリを gitwebで一時的にブラウジングする 876 | ```sh 877 | git instaweb [--local] [--httpd=] [--port=] [--browser=] 878 | ``` 879 | 880 | ## コミットログで署名も表示する 881 | ```sh 882 | git log --show-signature 883 | ``` 884 | 885 | ## グローバル設定を削除する 886 | ```sh 887 | git config --global --unset 888 | ``` 889 | 890 | ## 履歴を持たない新しい空ブランチを作成する 891 | ```sh 892 | git checkout --orphan 893 | ``` 894 | 895 | ## 別ブランチのファイルを表示する 896 | ```sh 897 | git show : 898 | ``` 899 | 900 | ## ルートとマージコミットのみ表示する 901 | ```sh 902 | git log --first-parent 903 | ``` 904 | 905 | ## 直前の2コミットをインタラクティブにrebaseする 906 | ```sh 907 | git rebase --interactive HEAD~2 908 | ``` 909 | 910 | ## 作業中のブランチを表示する 911 | ```sh 912 | git checkout master && git branch --no-merged 913 | ``` 914 | 915 | ## 二分探索でバグの発生元を発見する 916 | ```sh 917 | git bisect start # Search start 918 | git bisect bad # Set point to bad commit 919 | git bisect good v2.6.13-rc2 # Set point to good commit|tag 920 | git bisect bad # Say current state is bad 921 | git bisect good # Say current state is good 922 | git bisect reset # Finish search 923 | 924 | ``` 925 | 926 | ## pre-commitフックが仕掛けられているときに、チェックをスルーしてコミットする 927 | ```sh 928 | git commit --no-verify 929 | ``` 930 | 931 | ## 特定のファイルの変更履歴を表示する (リネームされていても) 932 | ```sh 933 | git log --follow -p -- 934 | ``` 935 | 936 | ## 特定のブランチをクローンする 937 | ```sh 938 | git clone -b --single-branch https://github.com/user/repo.git 939 | ``` 940 | 941 | ## 新しいブランチを作って移動する 942 | ```sh 943 | git checkout -b 944 | ``` 945 | 946 | 947 | __その他の方法:__ 948 | ```sh 949 | git branch && git checkout 950 | ``` 951 | 952 | ## コミット時にファイルモードの変更を無視する 953 | ```sh 954 | git config core.fileMode false 955 | ``` 956 | 957 | ## ターミナルの出力に色を付けない 958 | ```sh 959 | git config --global color.ui false 960 | ``` 961 | 962 | ## ターミナルの出力の色設定を個別に変更する 963 | ```sh 964 | git config --global 965 | ``` 966 | 967 | ## ローカルブランチを新しい順に表示する 968 | ```sh 969 | git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/ 970 | ``` 971 | 972 | ## 文字列か正規表現でGit管理下のファイルの行を検索する 973 | ```sh 974 | git grep --heading --line-number 'foo bar' 975 | ``` 976 | 977 | ## 最新のリポジトリだけcloneする 978 | ```sh 979 | git clone https://github.com/user/repo.git --depth 1 980 | ``` 981 | 982 | ## 指定の文字で全てのブランチのコミットログを検索する 983 | ```sh 984 | git log --all --grep='' 985 | ``` 986 | 987 | ## masterから指定のブランチに向けての最初のコミットを表示する 988 | ```sh 989 | git log --oneline master.. | tail -1 990 | ``` 991 | 992 | 993 | __その他の方法:__ 994 | ```sh 995 | git log --reverse master.. | head -6 996 | ``` 997 | 998 | ## ステージングしたファイルをステージングする前に戻す 999 | ```sh 1000 | git reset HEAD 1001 | ``` 1002 | 1003 | ## リモートリポジトリに強制的にpushする 1004 | ```sh 1005 | git push -f 1006 | ``` 1007 | 1008 | ## リモートリポジトリを追加する 1009 | ```sh 1010 | git remote add 1011 | ``` 1012 | 1013 | ## ファイルの全行に対して、最終更新日と更新者を表示する 1014 | ```sh 1015 | git blame 1016 | ``` 1017 | 1018 | ## ユーザ毎のコミット回数とメッセージを一覧表示する 1019 | ```sh 1020 | git shortlog 1021 | ``` 1022 | 1023 | ## 誰かの作業を上書きしない場合、リモートに強制的にpushする 1024 | ```sh 1025 | git push --force-with-lease 1026 | ``` 1027 | 1028 | ## ユーザが貢献した行数を表示する 1029 | ```sh 1030 | git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += ; subs += ; loc += - } END { printf "added lines: %s removed lines: %s total lines: %s 1031 | ", add, subs, loc }' - 1032 | ``` 1033 | 1034 | 1035 | __その他の方法:__ 1036 | ```sh 1037 | git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += ; subs += ; loc += - } END { printf "added lines: %s, removed lines: %s, total lines: %s 1038 | ", add, subs, loc }' - # on Mac OSX 1039 | ``` 1040 | 1041 | ## 全てのマージをリバートする 1042 | ```sh 1043 | git revert -m 1 1044 | ``` 1045 | 1046 | ## ブランチのコミット回数を表示する 1047 | ```sh 1048 | git rev-list --count 1049 | ``` 1050 | 1051 | ## エイリアス git undo 1052 | ```sh 1053 | git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f' 1054 | ``` 1055 | 1056 | ## オブジェクトノートを追加する 1057 | ```sh 1058 | git notes add -m 'Note on the previous commit....' 1059 | ``` 1060 | 1061 | ## 全てのオブジェクトノートを表示する 1062 | ```sh 1063 | git log --show-notes='*' 1064 | ``` 1065 | 1066 | ## 別のリポジトリからコミットを適用する 1067 | ```sh 1068 | git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k 1069 | ``` 1070 | 1071 | ## 特定のリモートブランチからfetchする 1072 | ```sh 1073 | git fetch origin master:refs/remotes/origin/mymaster 1074 | ``` 1075 | 1076 | ## 2つのブランチから共通の祖先を見付ける 1077 | ```sh 1078 | diff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1 1079 | ``` 1080 | 1081 | ## pushしてないコミットを表示する 1082 | ```sh 1083 | git log --branches --not --remotes 1084 | ``` 1085 | 1086 | 1087 | __その他の方法:__ 1088 | ```sh 1089 | git log @{u}.. 1090 | ``` 1091 | 1092 | 1093 | ```sh 1094 | git cherry -v 1095 | ``` 1096 | 1097 | ## 空白以外の変更をapplyする 1098 | ```sh 1099 | git diff --ignore-all-space | git apply --cached 1100 | ``` 1101 | 1102 | ## ローカル/グローバルのGitコンフィグを編集する 1103 | ```sh 1104 | git config [--global] --edit 1105 | ``` 1106 | 1107 | ## 指定範囲内をblameする 1108 | ```sh 1109 | git blame -L , 1110 | ``` 1111 | 1112 | ## Git変数を表示する 1113 | ```sh 1114 | git var -l | 1115 | ``` 1116 | 1117 | ## 整形済みのパッチを作成する 1118 | ```sh 1119 | git format-patch -M upstream..topic 1120 | ``` 1121 | 1122 | ## リポジトリのルート絶対パスを取得する 1123 | ```sh 1124 | git rev-parse --show-toplevel 1125 | ``` 1126 | 1127 | ## 特定期間のログを表示する 1128 | ```sh 1129 | git log --since='FEB 1 2017' --until='FEB 14 2017' 1130 | ``` 1131 | 1132 | ## 指定者以外のログを表示する 1133 | ```sh 1134 | git log --perl-regexp --author='^((?!excluded-author-regex).*) 1135 | 1136 | ``` 1137 | 1138 | ## ペンディング中の変更のまとめを作成 1139 | ```sh 1140 | git request-pull v1.0 https://git.ko.xz/project master:for-linus 1141 | ``` 1142 | 1143 | ## リモートリポジトリのブランチを表示する 1144 | ```sh 1145 | git ls-remote git://git.kernel.org/pub/scm/git/git.git 1146 | ``` 1147 | 1148 | ## Git管理していないファイルをバックアップする 1149 | ```sh 1150 | git ls-files --others -i --exclude-standard | xargs zip untracked.zip 1151 | ``` 1152 | 1153 | ## エイリアスを一覧表示する 1154 | ```sh 1155 | git config -l | grep alias | sed 's/^alias\.//g' 1156 | ``` 1157 | 1158 | 1159 | __その他の方法:__ 1160 | ```sh 1161 | git config -l | grep alias | cut -d '.' -f 2 1162 | ``` 1163 | 1164 | ## git statusを簡潔に表示する 1165 | ```sh 1166 | git status --short --branch 1167 | ``` 1168 | 1169 | ## 昨日のコミットをチェックアウトする 1170 | ```sh 1171 | git checkout master@{yesterday} 1172 | ``` 1173 | 1174 | ## ローカルブランチをリモートリポジトリにpushして追跡する 1175 | ```sh 1176 | git push -u origin 1177 | ``` 1178 | 1179 | ## ブランチのベースを変更する 1180 | ```sh 1181 | git rebase --onto 1182 | ``` 1183 | 1184 | ## HTTPsではなくSSHをリモートへの接続に使用する 1185 | ```sh 1186 | git config --global url.'git@github.com:'.insteadOf 'https://github.com/' 1187 | ``` 1188 | 1189 | 1190 | 1191 | --------------------------------------------------------------------------------