基本的な考え方
- ローカルとリモートが対になっている
- originはリモートリポジトリのデフォルトの名前
- 基本的に、gitで指示するのはリモートの場所、送信元は、自分の今いるブランチとなる
git push origin master
今いるブランチからorigin(リモート)のmasterブランチにpush
git diff
基本
git diff --name-only remoteName/branchName
※--name-only:ファイル名のみ
ローカルコミットとリモートのDiff
git diff remoteName/branchName..HEAD
ローカルとステージングのDiff
git diff
リモートとステージングのDiff
git diff --cached
直前のコミット
git diff HEAD^
リモートタグ比較
git diff origin/tag1 origin/tag2
リモートmasterとブランチ比較
git diff origin/master origin/branchName
ファイル単体
git diff origin/master origin/branchName -- [filePath]
git log
コミットの内容を確認
git log -p -1
※
- p:変更点を表示
- 1:最初のコミットのみ(2にすれば直近2コミット分)
git status
ローカルとステージングの状態を確認する
git revert
pushした変更を取り消す。修正の履歴を残し、HEADも修正前の位置に戻してくれるため、一番ベーシックな方法。
-
- soft:変更をステージングに戻す
- mixed:変更をローカルに戻す
- hard:変更をローカル含めすべて取り消す
resetとの違い
resetはコミットそのものを消去する。revertはコミットを削除した、というコミットを作る。
ローカルでresetした資源をリモートにpushしようとすると、ローカルのHEADがremoteよりも過去となるため、HEADの位置が一致せず、pushできない。
また、コミット自体を削除するため取り消しの履歴が残らないため、resetよりもrevertが推奨されている。
ただし、git addの取り消しの場合はHEADの位置が移動しないため、resetでもOK。
git reset HEAD:HEADの位置にリセット
git clone
git clone [remotePath]
タグ指定
git clone [remotePath] -b tagName
※ブランチ指定の場合はtagNameをbranchNameに変えればOK
cherry-pick
特定のコミットのみを取り出す
git cherry-pick commitId
git config
gitのユーザ名やパスワードなどを表示する
Appendix
History一覧抽出
※GitBashを使用する。コマンドプロンプトだとフリーズすることがある。
git log master --date=short --reverse --no-merges --pretty=format:"%cd%x09%an%x09%s" --[filePath] > ../output.txt
※ > ../output.txt:今いるディレクトリ直下にoutput.txtという名前で出力
-
- no-merges:マージのコミット履歴を出力しない(変更履歴には不要な情報のため)
用語集
- インデックス:ステージングのこと。昔はキャッシュとも呼ばれており、git logでステージングとの差分を比較するオプションのchachedはこの名残
- ワークツリー:ローカルの作業ディレクトリ
インシデント
git diffで文字化け
日本語が以下のように文字化けする
$ git config --global core.pager "LESSCHARSET=utf-8 less"
git addでステージングしたファイルをローカルで削除してしまった
git checkout 引数なし でステージングの修正をローカルに復元できる。
git checkoutエラー
error: The branch 'branchName' is not fully merged.
対象のブランチにプッシュされていないコミットが残っている。
>HEADまで巻き戻して、変更を破棄すればよい。
git pullエラー
error: Your local changes to the following files would be overwritten by merge
ローカルに修正があり、pullしたい資源とコンフリクトするのでpullできない。
ローカルの修正をstush(退避)する
SSL証明書エラー
SSL certificate problem: self signed certificate in certificate chain
リモートの自己証明書に問題がある
リモート先(GitHabやGitLab)にアクセスし、ブラウザから証明書を取得する。
git config --list
で証明書の格納されている場所を確認し、証明書の内容を、新規で取得したものに書き換える