git
last update:
2024/06/21
Search :
: 0 results
導入
http://git-scm.com/
ステータス
git --version // バージョン確認
git config -l // リモートURLやエイリアス内容など確認
git config --global color.ui auto // gitコンソールの色付け
git config --global alias.[string] '[command]' // "git "以降のコマンドをエイリアス化
// git config --global alias.a 'add -A'
// git config --global alias.c 'commit'
// git config --global alias.b 'branch'
// git config --global alias.co 'checkout'
// git config --global alias.s 'status -s -b -uall'
// git config --global alias.t 'log --graph --all --date=short --format="%C(green)[%ad] %C(cyan)%h %C(yellow)%an %C(red)%d %Creset%s"'
git remote -v // リモートURL確認
git remote set-url origin [remote url] // 現ローカルをリモートoriginに紐づける
git remote set-url [remote repository name] [url(to)] // リモートのアドレスを変更
git remote rename [remote repository name(from)] [remote repository name(to)] // リモートのリポジトリ名を変更
git status // ファイルのステータス確認
git status -s -b -uall // 簡易表示・ブランチ表示・非追跡ファイル表示
git log // リポジトリの変更履歴確認
git log -[n] // n個前まで表示
git log -p // 差分も表示
git log --decorate // headの位置やbranch,tag情報を含めて表示
git log --oneline // 簡易履歴確認
git log --oneline --graph --decorate --all // アスキーアートで表示
git log --graph --all --date=short --format="%C(green)[%ad] %C(cyan)%h %C(yellow)%an %C(red)%d %Creset%s" // ログ表示の色付け
gitk // GUIツールで変更履歴確認
git show // HEADとその前回コミットの差分を表示
git show [commit id] // 指定コミットとその前回コミットの差分を表示
git diff // HEADと作業フォルダの差分を表示
git diff --cached // HEADとインデックスの差分を表示
git diff [commit id(before)] [commit id(after)] // beforeとafterの差分を表示
// [commit id(after)]を省略すると、[commit id(before)]からHEADまでの差分を表示
git diff [commit id(before)] [commit id(after)] --name-only // 差分のあるファイル名のみ表示
git diff [commit id(before)] [commit id(after)] [file] // 指定したファイルの差分表示
クローン
git clone [remote url] [dir] // カレント内にdirという名でリポジトリを取得(dir指定無しだとremoteの名前が入る)
// リモートリポジトリ ---|--> ローカルリポジトリ --- インデックス ---> 作業フォルダ
git clone [remote url] [dir] --recursive // サブモジュールごと取得
ファイル更新
git add [file] // 編集内容をインデックスに登録(ステージング)
git add . // カレント以下の全ての更新ファイル対象
git add -A // 加えて、追加ファイルや削除ファイルも対象
// リモートリポジトリ ---|--- ローカルリポジトリ --- インデックス <--- 作業フォルダ(編集後) --- 作業フォルダ(編集前)
git commit -m "comment" // インデックス内容をローカルリポジトリに送る
git commit -am "comment" // addを兼ねる
git commit --amend // 直前のコミットに上書き
git commit --amend -m '[str]' // 直前のコミットのコメントを上書き
// リモートリポジトリ ---|--- ローカルリポジトリ <--- インデックス --- 作業フォルダ(編集後) --- 作業フォルダ(編集前)
git reset
git reset [file]
git reset [commit id]
// コミットやステージングしたファイルをステージング前の状態に戻す(アンステージング)
// リモートリポジトリ ---|--- ローカルリポジトリ --- インデックス ---> 作業フォルダ(編集後) --- 作業フォルダ(編集前)
// リモートリポジトリ ---|--- ローカルリポジトリ --- インデックス ---> 作業フォルダ(編集後) --- 作業フォルダ(編集前)
git reset --hard
git reset --hard [commit id]
// コミットやステージングの有無にかかわらず全てのファイルを編集前の状態に戻す(追加してステージングしていないファイルはそのまま残る)
// リモートリポジトリ ---|--- ローカルリポジトリ --- インデックス --- 作業フォルダ(編集後) ---> 作業フォルダ(編集前)
// リモートリポジトリ ---|--- ローカルリポジトリ --- インデックス --- 作業フォルダ(編集後) ---> 作業フォルダ(編集前)
// リモートリポジトリ ---|--- ローカルリポジトリ --- インデックス --- 作業フォルダ(編集後) ---> 作業フォルダ(編集前)
git checkout [commit id or branch] // 各ポイントのファイル状態を取得(ステージングや作業中のファイルがある場合はエラー)
git checkout -f [commit id or branch] // 各ポイントのファイル状態を取得(ステージングや作業中のファイルがある場合でも強制実行し作業内容は削除)
// リモートリポジトリ ---|--- ローカルリポジトリ --- インデックス --- 作業フォルダ(編集後) ---> 作業フォルダ(編集前)
git checkout [commit id] [file] // ファイル個別に取得
git push // 現ローカルブランチが既にリモートに存在する場合
git push origin [remote branch]:[local branch] // pushしたいローカルブランチがまだリモートに無い場合
// リモートリポジトリ <--|--- ローカルリポジトリ --- インデックス --- 作業フォルダ(編集後) --- 作業フォルダ(編集前)
git fetch // リモートリポジトリの履歴を取得
// リモートリポジトリ ---|--> ローカルリポジトリ --- インデックス --- 作業フォルダ(編集後) --- 作業フォルダ(編集前)
// 無名ブランチ FETCH_HEAD として取得
// git diff FETCH_HEAD で作業フォルダとの差分を表示
git pull // fetch + merge(作業フォルダの内容と統合)
git pull [remote url] [remote branch] // [remote branch] から現状ブランチにpull
// リモートリポジトリ ---|--> ローカルリポジトリ --- インデックス --- 作業フォルダ(編集後) ---> 作業フォルダ(編集前)
git clean -n // まだ.git管理下に無い(一度もaddされたことのない)ファイルの確認
git clean -fdx // まだ.git管理下に無い(一度もaddされたことのない)ファイルの削除
// 競合の編集
// pushして競合が起きたら、pull -> ファイル編集 -> add -> commit -> push
git ls-files -u
// コンフリクトしたファイル一覧
git margetool -y [file]
// GUIでコンフリクト処理
ブランチ
git branch // ローカルブランチ一覧表示(HEADがあるブランチに*が付く)
git branch -r // リモートブランチ一覧表示
git branch -a // ローカルとリモート一覧表示
git branch [local branch] // ブランチ作成
git branch -d [local branch] // ブランチ削除(マージ済みのみ)
git branch -D [local branch] // ブランチ削除(強制)
git branch -m [local branch(from)] [local branch(to)] // ブランチ名修正
git fetch origin pull/[PRのID]/head:[remote branch] // メンバーのPR内容をローカルに取得
git branch [local branch] origin/[remote branch] // リモートからブランチ取得
git push origin [local branch]:[remote branch] // リモートにブランチをpush
git push origin --all // すべてのブランチをリモートにpush
git push origin :[remote branch] // リモートブランチ削除
git checkout [branch] // 指定ブランチにHEADを移動
git checkout [commit id] // 指定コミットにHEADを移動
// ブランチがないコミットにHEADを移動して変更を加えてコミットした場合、そのポイントに孤立(detached)したブランチができる
// 孤立ブランチを残す場合はそのポイント上でブランチ名を付ける
// git checkout -b [new branch name]
ブランチ = 履歴ツリー内における、ある参照コミットポイント
HEAD = 履歴ツリー内における、現在の参照コミットポイント
master = ローカルのデフォルトブランチ
origin = リモートリポジトリ
origin/master = リモートのデフォルトブランチ
origin/HEAD = リモートのカレントポイント
タグ
git tag [tag] // タグ作成
git tag -am "comment" [tag] // comment付きタグ作成
git tag // タグ一覧確認
git tag -n // comment付きタグ一覧確認
git push origin [tag] // リモートにタグをpush
git push origin --tags // リモートに全てのタグをpush
git pull --tags // リモートのタグを取得
git tag -d [tag] // ローカルタグ削除
git push origin :[tag] // リモートタグ削除(ローカルタグ削除した後)
履歴操作
git merge [commit id] or [branch]
// 指定コミットの内容、又は指定ブランチが参照するコミットの内容をHEADに統合し、履歴を繋げる
// 指定コミットがHEADの先に繋がる場合は、HEADがそこへ移る(fast-forward)
git merge --no-ff [commit id] or [branch]
// 指定コミットがHEADの先に繋がる場合でも、指定コミットの先に新しいマージコミットを作る
git merge --squash [commit id] or [branch]
// 指定コミットの内容は統合するが、履歴は繋がない
git revert [commit id]
// [commit id] の内容を打ち消すコミットを1つ先に作る
// その後pushすることでリモートの状態を戻せる(打ち消した履歴は残す)
git revert --abort
// revert中止
git rebase [parent branch]
// 親ブランチの更新分を作業ブランチ(current)に取り込む
git stash
// rebaseでconflictが起きたとき、問題箇所を確認する
git rebase --continue
// rebaseでconflictが起きたとき、conflictを解消してからこのコマンドを打って続行する
git rebase --abort
// rebaseで問題が起きたとき、中止する
git rebase -i HEAD~~~
git rebase -i HEAD~3
// 同軸の履歴で、過去複数コミットを一覧表示、削除(行そのものを消す)、編集(edit)、前のコミットと統合(squash)、維持(pick)など設定し、その結果を纏めたコミットを別軸に作る
git reset --hard ORIG_HEAD
// rebaseが成功した後、取り消す
git cherry-pick [commit id]
// 指定コミットの内容をHEADに統合した新たなコミットを作る
// 統合元の履歴は繋がない
// localで巻き戻したい時(remoteにまだコミットしていない内容に限る)
1) git reflog
// 操作の履歴を全て表示して戻し先の[commit id]を確認(コミットを削除した履歴も表示される)
2) git reset --hard [commit id]
// カレントブランチとHEADを[commit id]の状態に戻す
// localとremoteでAからDまで巻き戻したい時(A,B,Cを打ち消すコミットを作る)
1) git revert [commit id A]...[commit id D]
// 最新コミットからA,B,C,D,E,F,...と並ぶ履歴の時、上記コマンドでA,B,Cの打ち消しコミット-A,-B,-Cが順に生成される(Dの打ち消しコミットは生成されない)
// revert後の履歴は、-C,-B,-A,A,B,C,D,E,F,...となる
2) git push
// revert内容をpushしてremoteの巻き戻しが完了
// localとremoteでAからDまで巻き戻したい時(A,B,Cを打ち消すコミットを作るが、その中にmergeコミットが含まれる場合)
1) git revert -m 1 [commit id A]...[commit id D]
// 最新コミットからA,B,C,D,E,F,...と並ぶ履歴の時、上記コマンドでA,B,Cの打ち消しコミット-A,-B,-Cが順に生成される(Dの打ち消しコミットは生成されない)
// revert後の履歴は、-C,-B,-A,A,B,C,D,E,F,...となる
2) git push
// revert内容をpushしてremoteの巻き戻しが完了
// localとremoteで強制的に巻き戻したい時(履歴が消えるので注意)
1) git reset [commit id]
2) git push
検索,置換
git grep [string] // git管理の範囲内でstringをカレント傘下のファイル内から検索
git grep -n [string] // 行番号付き
git grep -l [string] // ファイル名のみ表示
git grep [string] [dir] // dir傘下のファイル内から検索
git grep -l [from] | xargs sed -i '' -e 's/[from]/[to]/g' // カレント傘下のファイル内を対象に置換
ローカルリポジトリ作成
1)リモートリポジトリに新規プロジェクト追加
2)ローカルにプロジェクト用の作業フォルダ作成
3)作業フォルダに入る
4)git init // フォルダ内をGitの管理下にする
5)ファイル等作成
6)git add . // フォルダ内の全てのファイルを更新対象にする
7)git commit -m "new project" // ローカルリポジトリにコミット
8)git remote add origin [remote url] // リモートリポジトリのURLをoriginとして登録
9)git push -u origin master // ファイルをリモートリポジトリに送信
リモートbareリポジトリ作成
1) サーバのサイトにログイン
2) sshアカウントを有効にする // user name, host domain, port number, password を確認
3) ターミナル起動
4) ssh [user name]@[host domain] -p [port number] // サーバに入る
5) (password input)
6) pwd // user dir を確認
7) mkdir [user dir]/repos // ユーザに割り当てられた場所の直下にbareリポジトリを格納するフォルダ"repos"を作成
8) cd [user dir]/repos // そこに移動
9) mkdir [project name].git // 新規projectのbareリポジトリ用フォルダ作成
10) cd [project name].git // そこに移動
11) git init --bare --shared // bareリポジトリ作成
12) cd [user dir]/web // 公開projectを格納する場所に移動
13) git clone [user dir]/repos/[project name].git [project name] // bareリポジトリからクローンして公開用フォルダを作成
14) cd [user dir]/repos/[project name].git/hooks // bareリポジトリのhooksフォルダに移動
15) vi post-receive // post-receiveファイルを作成し、以下のシェルスクリプト3行を記入し保存
#!/bin/sh
cd [user dir]/web/[project name];
git --git-dir=.git pull
16) chmod +x post-receive // hookに実行属性を与える
17) exit // サーバを抜ける
18) mkdir [work space]/[project name] // ローカルにproject作成
19) cd [work space]/[project name] // そこに移動
20) git init // ローカルリポジトリ作成
21) git remote add origin ssh://[host domain]:[port number][user dir]/repos/[project name].git // bareリポジトリに紐づける
22) ファイル作成/編集
23) git add .
24) git commit -m 'comment'
25) git push origin master // 以降は git push
26) (password input)
push 完了
bareリポジトリにpushされたファイルが、post-receiveによって自動的に公開用リポジトリにpullされる
26) git branch --set-upstream-to=origin/master master // 最初のpull設定
27) git pull
28) (password input)
pull 完了
サブモジュール
git submodule // サブモジュールのステータス表示
git submodule add [submodule remote url] [dir] // サブモジュールのリポジトリurlと格納するdirを登録
// 下記の内容を持った .gitmodules が生成される
//
// [submodule "[dir]"]
// path = [dir]
// url = [submodule remote url]
git submodule init // .gitmodules の内容を、親リポジトリの .git/config に登録
git submodule update // サブモジュールの更新分をダウンロード
git submodule update --init // init + update
// 上記は親リポジトリのルートで実行
// サブモジュールとその親リポジトリのコミットは連動しない
git clone [remote url] [dir] --recursive // サブモジュールごとクローン
.gitignore
// global
git config --global core.excludesfile {workspace}/.gitignore
// local
vi {project}/.gitignore
// exsample
Thumbs.db
ehthumbs.db
Desktop.ini
.DS_Store
.AppleDouble
.AppleSingle
.LSOverride
Icon
._*
.sass-cache
*.css.map
*.sass.map
*.scss.map
.stylelintcache
.Trashes
node_modules/
npm-debug.log
bower_components/
*.swp
.idea
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
code_popup
切断
rm -rf .git // 切断するプロジェクトのルートで実行、傘下の.gitフォルダを削除