プログラミンGOO

プログラミングナレッジ、ワードプレス、広告収入等について、気づき・備忘録を残していきます。

Git基礎

基本的な考え方

  • ローカルとリモートが対になっている
  • 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で文字化け

日本語が以下のように文字化けする
<81><82>

$ 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
で証明書の格納されている場所を確認し、証明書の内容を、新規で取得したものに書き換える