git diff
- -M オプション
- ファイル名変更のチェック
- -M オプション
git shortlog
- コミッタごとにログ表示
- -s オプション
- 作成者名とコミット数のみ
- -n オプション
- コミット数で降順ソート
git status
- -s オプション
- 短縮表示
- 1列目は staged、2列目は unstaged
- -s オプション
- Git 管理下での mv, rm は
git mv
,git rm
を使う git commit
- -a オプション
- すべての変更をコミット
- コミットメッセージの書き方
- タイトル、1行開けて本文
- タイトルは git format-patch のメールタイトルや git shortlog の内容になる
- タイトル、1行開けて本文
- --amend オプション
- 直前コミットの修正
- -a オプション
git reset
- ワーキングツリーやインデックス、ブランチを特定の状態に戻す
- reset 実行前の HEAD は ORIG_HEAD に保存される
- --hard オプション
- HEAD の参照とインデックス、ワーキングツリーを変更
- インデックスとワーキングツリーを指定したコミットの状態にする
- --mixed オプション
- HEAD の参照とインデックスを変更
- git reset のデフォルト
- --soft オプション
- HEAD の参照のみを変更
git clean
- Git の管理下に置かれていないファイルを削除
- -n, --dry-run オプション
- 削除されるファイルの確認
- -f, --force オプション
- 実際にファイルを削除
- -d オプション
- ディレクトリも削除
- config で clean.requireForce = false にすれば -f は要らなくなる
- .gitignore で指定されたファイルは削除対象とならない
- -x オプションで .gitignore は無視される
git grep
- --[and|or|not]
- 正規表現の論理演算が行える
- ex.
git grep -e ^Ka --and -e ma$
- Ka で始まり ma で終わる行を検索
- grep にはない
- --[and|or|not]
Last active
June 24, 2018 08:35
-
-
Save dtan4/5276185 to your computer and use it in GitHub Desktop.
「Gitによるバージョン管理」メモ
- リポジトリサーバに中央リポジトリを置く
- このリポジトリは管理者 PC のみからアクセスできる
- bare リポジトリ
- リポジトリサーバに開発者ごとのリポジトリを置く
git clone --bare <中央リポジトリ>
- 管理者 PC に開発者リポジトリをリモートリポジトリとして登録
git remote add <開発者名> <開発者リポジトリ>
- 開発者 PC の設定
- 開発者リポジトリを clone する
- 中央リポジトリをリモートリポジトリとして登録
- 開発者は中央リポジトリを pull
- 開発者は変更を自分のリポジトリに push
- 管理者は開発者リポジトリを pull
- 管理者は開発者リポジトリをマージした master を中央リポジトリに push
<<<<<< HEAD
から=======
までが master の変更部分>>>>>> hoge
までがマージ元にあった変更部分git blame
で確認し、コンフリクトを解消してコミット- コンフリクトを避けるためにも
- 中央リポジトリにマージを行う前に、中央リポジトリの変更を適用する
- 自分のコミットが中央リポジトリの変更より後に来るようにする
git rebase
で変更を取り込む
- 中央リポジトリにマージを行う前に、中央リポジトリの変更を適用する
git clone
- リモートリポジトリの HEAD で指定されたブランチがチェックアウトされる
- hoge ブランチが HEAD であった場合、ローカルには hoge ブランチがチェックアウトされる
- -b オプション
- チェックアウトするブランチを指定
- -o, --origin オプション
- リモートリポジトリの名前を指定する
- デフォルトでは origin
- リモートリポジトリの HEAD で指定されたブランチがチェックアウトされる
git remote
- -v オプション
- 現在設定されているリモートリポジトリを表示
git remote show <リモートリポジトリ名>
- リモートリポジトリの詳細な情報を表示
- -n オプションでキャッシュされた情報を表示
git config remotes.<グループ名> "追加したいリモートリポジトリ"
- リモートリポジトリのグループ分け
git remote update
- リモートリポジトリの更新
git remote prune
- 存在しなくなったリモートブランチを削除する
git remote show
で stale と表示されるブランチを削除
- -v オプション
git merge
- 共通の祖先コミットを探し、3-way マージ手法を使ってマージする
- --squash オプション
- マージするコミットを一つにまとめられる
- マージ元ブランチのコミットが一つにまとまる
git show
,git log -p --cc
でマージコミットによる修正を確認できる- コンフリクト
- コンフリクトには3つのステージがある
- 共通部分
- マージ先の最新コミット (HEAD)
- マージ元の最新コミット (MERGE_HEAD)
git show :<ステージ番号>:<ファイル名>
で状態を確認git diff
のオプションで各ステージとの差分を確認できる- --base
- --ours
- --theirs
- コンフリクトには3つのステージがある
git push
- エラーが起こる原因
- ローカルブランチかリモートブランチのどちらかにしか存在しないコミットがある
- リモートにはコミット D があり、ローカルには E, F, G がある
- ローカルリポジトリをリモートリポジトリに同期させて更新する
- リモートリポジトリが bare リポジトリでない場合、そのワーキングツリーにチェックアウトされているブランチには送信できない
- bare リポジトリ以外には送信しない
- ローカルブランチかリモートブランチのどちらかにしか存在しないコミットがある
- エラーが起こる原因
git pull
- 内部では
git fetch
→git merge
を行なっている - リモートトラッキングブランチが指定されている場合は、リモートリポジトリとリモートブランチは省略できる
- 内部では
git branch
git branch <作成先ブランチ> <作成元ブランチ>
- -r オプション
- リモートトラッキングブランチを確認
- -a オプション
- リモートトラッキングブランチとローカルブランチの両方を表示
- ブランチ名はディレクトリ構造のようにつけると管理しやすい
- test/new-data
- -m オプション
- ブランチ名の変更
- -M オプション
- 既存のブランチ名に変更
- -d オプション
- ブランチの削除
- 親ブランチより新しいコミットが存在する場合、-D オプションでないと削除できない
- リモートトラッキングブランチ
- branch.<ブランチ名>.remote
- リモートリポジトリ
- branch.<ブランチ名>.merge
- リモートトラッキングブランチ
git branch <ブランチ名> -t <トラッキング先>
- ブランチ作成時にトラッキング先を指定
- トラッキング先にはローカルブランチを指定できる
- push はできないので merge を使う
- branch.<ブランチ名>.remote
git blame
- -L オプション
- 行番号指定
- 3,+5 などオフセット指定も可能
- -C オプション
- ファイル間でコピーされた箇所を検出
- コピーしてなくとも、同じコードであれば検出される
- -Cn の形式でチェックする文字数下限を n 文字に設定できる
- -M オプション
- ファイル中で移動した箇所を検出
- -C, -M でチェックされるのは 英数字のみ
- -L オプション
git checkout
- 未コミットの変更があってもブランチを切り替えられる
- 切り替え先に変更があった場合は --merge オプションでマージできる
- -f, --force オプション
- ワーキングツリーの状態を HEAD に初期化する
- 未コミットの変更があってもブランチを切り替えられる
- タグ
git push origin <タグ名>
- タグをリモートリポジトリに反映
git push origin :<タグ名>
- リモートリポジトリからタグを削除
- ブランチ削除と被るので、refspec を省略せずに指定するのが望ましい
- :refs/tags/<タグ名>
git describe
- 最も近いタグを表示
git archive
- 顧客に送るスナップショットを作成
- --format= オプション
- tar, zip を指定できる
- bzip2 や gzip で圧縮するにはパイプを使う
- --prefix= オプション
- 展開後のディレクトリ名を指定
git fetch
- リモートブランチを FETCH_HEAD に取り込む
git branch <ブランチ名> FETCH_HEAD
- 取り込んだ FETCH_HEAD を起点としてローカルブランチを作成する
git stash
- 変更をキューに保存
git stash pop
- キューから取り出して適用
git stash apply
- キューに残して適用
- キュー番号を指定して pop, apply できる
- stash@{<キュー番号>}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment