gitの初期化
git init
状態・検索
#addしたファイルや修正したけどaddしてないファイルの状況など分かる
git status
#過去のコミットした状況が分かる
git log
git show
#直前のコミットとの差分(オプションなしdiff)
git diff
#2点間の差分が分かる
git diff [コミットID]..[コミットID]
#ブランチ同士の差分を見る
git diff [ブランチ名]..[ブランチ名]
#pullする前に、リモート追跡ブランチとの差分を確認する
#(たとえば今あなたがmasterブランチにチェックアウトしていて、リモートリポジトリのmasterと比較したい場合)
#1.まずリモートリポジトリから更新内容を取得してきて
git fetch origin
#2.ローカルリポジトリのmasterブランチの最新コミット(HEAD)と、リモート追跡ブランチ(origin/main)を比較する
git diff HEAD..origin/main
#push する前に、リモート追跡ブランチとの差分を確認する
#(ローカルで進めたコミットをpushする前に、リモートリポジトリの状態と比較したいとき)
git diff origin/master..HEAD
#保存したリスト(スタッシュリスト)を見る
git stash save
#特定の文字列を含む箇所を検索したい(大文字、小文字を区別する)
git grep "検索したい文字列"
#行番号も表示する設定
git config --gloal grep.lineNumber true
#コミットやブランチを指定して検索したい
git grep "検索したい文字列" [コミットID,ブランチ]
#特定ワードを含むファイル名のみ表示したい
git grep -l “検索したい文字列”
#いつ誰のコミットでその行が変更されたのかを調べられます。
git blame [ファイル名]
#タグを一覧表示
git tag
#スタッシュを表示
git stash list
コミットなどの編集の反映
#ステージングする(ワイルドカード指定もできる)
git add ファイル名
#変更ファイルすべてをステージングする
git add .
#ステージングを下げる
git restore --staged ファイル名
#ステージングを下げる ファイルの変更まではもとに戻らない
git reset
#変更内容を確認する
git diff --cached
#コミット
git commit
#コメント付き(エディターが立ち上がらない)
git commit -m "ここにコメントを書き込む"
#変更の詳細を見れる
git commit -v
#コミットの内容を見る コミットIDははじめ4ケタだけでもいい
git show コミットID
#直近
git show
#別のブランチでやってる特定のコミットだけをコピーしてきて、コミットする
git cherry-pick [コミットID]
#複数は
git cherry-pick [コミットIDその1]..[コミットIDその2]
#取り込みたいけどコミットはしたくないとき(作業ディレクトリだけに反映する)
git cherry-pick -n [コミットID]
#作業中のファイルを一時保存
git stash save
#保存したリスト(スタッシュリスト)を見る
git stash list
#スタッシュを復活させる
git stash apply stash@{n}
#スタッシュを削除する
git stash drop stash@{n}
#スタッシュの復活&削除
git stash pop stash@{n}
#タグをつける
git tag [タグ名]
#注釈付きタグをつける(aはアノテート)
git tag -a [タグ名] -m "注釈"
#タグをリモートリポジトリに共有する
git push origin [タグ名]
#複数のタグを全部プッシュする
git push origin --tags
#タグを一覧表示
git tag
#ローカルリポジトリのタグの削除
git tag -d [タグ名]
#リモートリポジトリのタグの削除
git push origin --delete [タグ名]
元に戻す
#ワークディレクトリ上の変更を元に戻す
git checkout "ファイル名"
#ワークディレクトリ上の変更を元に戻す
git restore --worktree [ファイル名]
#ワークディレクトリ上の変更を元に戻す
git reset --hard HEAD
#特定のファイルを、特定のコミット時点に戻す
git restore --source [コミットID] [ファイル名]
#特定のファイルを、特定のコミット時点に戻す
git checkout [コミットID] [ファイル名]
#直前のコミットをやり直す(※push後には使ってはいけない)
git commit --amend
#リバート(指定したコミットと逆の内容をコミットする)(※push後にも使える)
git revert [打ち消したいコミットID]
#HEADの位置のみ
git reset --soft HEAD^
#8個前のコミットまで戻す
git reset --soft HEAD~8
#指定したコミットIDまで戻す
git reset --soft caddd1c
#HEADとステージも戻す(addしたファイルを、addする前に戻す)
git reset --mixed [ファイル名]
#HEADとステージも戻す(addしたファイルを、addする前に戻す)
git restore --staged [ファイル名]
#HEADとステージと作業ディレクトリも戻す
git reset --hard
#リフログ(HEADの移動履歴を表示)
git reflog
#戻りたい地点の数字を指定してリセットする
git reset --hard HEAD@{n}
#スタッシュを復活させる
git stash apply stash@{n}
#スタッシュを削除する
git stash drop stash@{n}
#スタッシュの復活&削除
git stash pop stash@{n}
ブランチ
#ブランチの確認
git branch
#すべてのブランチを表示
git branch -a
#ブランチ生成
git branch 新規ブランチ名
#リモートブランチを元にローカルブランチを作成する
git branch [新規ローカルブランチ名] origin/[コピーしたいリモートブランチ名]
#ブランチ変更
git checkout ブランチ名
#ブランチ変更
git switch ブランチ名
#ブランチの生成&変更
git checkout -b 新規ブランチ名
git switch -c 新規ブランチ名
#ブランチ削除(小文字の場合はマージしていない変更があれば削除されない)
git branch -D[d] engawa
#前のブランチに戻る
git checkout -
#ブランチ名を変更する
git branch -m 変更後ブランチ名
#リモートブランチをローカルワークスペースに落とす
git checkout -t ブランチパス
#すでに消されたブランチをローカルでも消す
git fetch --prune
#すでに消されたブランチをローカルでも消す
git remote prune [リポジトリ名]
リモートとのやりとり
#プッシュする
git push [リモート] [ローカルブランチ名]
#リモートリポジトリを表示
git remote
#登録(追加)されているリモートリポジトリのURLを表示
git remote -v
#リモートからローカルブランチにコピーする
git fetch
#リモートからワークツリーにマージする
git pull リモート名 ブランチ名
#リモートリポジトリ名を変更
git remote rename [旧リモート名] [新リモート名]
#リモートリポジトリを削除
git remote rm [リモートリポジトリの呼び名]
#リモートリポジトリを追加する
git remote add [リモートリポジトリの呼び名] [リモートリポジトリのURL]
マージ・リベース
#マージ
git merge [ブランチ名]
#マージを中断する(コンフリクトが複雑なときとか)
git merge --abort
#リベース(親コミットを変更する。別のブランチの子コミットをポインタする)
git rebase [ブランチ名]
コンフリクト
<<<<<<< HEAD
<h1>hello git1</h1>
=======
<h1>hello git2</h1>
>>>>>>> feature
コンフリクトが発生した場合は正しいコードを残していらないものは削除して保存する
Gitの設定
# 設定ファイル閲覧
cat ~/.gitconfig
# 設定の閲覧(オプションでスコープを選択)
git config --list --global
#グローバル情報の設定(--local --systemもある)
git config --global user.name "名前"
git config --global user.email 自分のメアド
# ローカル情報の削除
git config --local --unset user.name
# 直前にコミットされた変更を修正し、作成者をリセットするために使用されます
git commit --amend --reset-author
#エイリアス
#git statusをgit stで使用可能にする
git config --global alias.st status
#grepで行番号も表示する
git config --gloal grep.lineNumber true
クローン
git clone [SSHのURL]
#initブランチから始める
git clone --branch init [SSHのURL]
SSHの公開鍵
# SSH鍵を作る
ssh-keygen -t rsa -b 4096 -C "コメント"
# -t rsa:鍵の種類(デフォルトでrsaだが確実性のため記載する)
# -b:バイト。鍵の長さ。長いほど強固になる。
# -C:コメント
# SSH鍵がつくられたディレクトリに移動
cd ~/.ssh
#SSH公開鍵を見る
cat id_rsa.pub
#コピーする
cat id_rsa.pub | pbcopy
#生成された鍵をGitHubにペーストして追加する
#done
SSHでクローンする
SSHが標準的な方法
※HTTPS,GitHub CLIはGitHub独自の知識が必要
- SSH鍵を作成する
- コマンドラインからRSAで鍵を生成と取得
-
ssh-keygen -t rsa -b 4096 -C “ここにコメント”
- 鍵の保存先を聞かれる。デフォルトでOK。
- パスフレーズを設定する
-
cd ~/ .ssh
鍵のある場所に移動する -
cat id_rsa.pub | pbcopy
クリップボードにコピーする
-
- コマンドラインからRSAで鍵を生成と取得
- GitHubに戻り、KeyのテキストエリアにペーストしSSH鍵を登録する
- リモートリポジトリのURLを取得する
- GitHubの該当のリポジトリを開き、Code→SSHタブのURLをコピーする
- Gitクローンする
git clone [SSHのURL]
- SSHのパスフレーズを入力して完了!
-
鍵のありか
ホームディレクトリ直下(~/.ssh)にある
id_rsa.pub:公開鍵。公開しても大丈夫な鍵。
id_rsa:複製厳禁なシークレットな鍵。
知識
GitHub
Web上でリモートリポジトリを管理できるサイト
ブランチ
コミットIDへの参照(ポインタ)
HEAD
現在作業中のブランチへの参照(ポインタ)
マージ
Fast forward merge
古いブランチを新しいブランチに追いつかせる
Auto Merge
分岐したブランチをまとめる
マージコミットという新しいコミットが生成される
ステージ
コミットする変更を準備する
ワークツリーの変更で一部のコミットしたいものだけを切り出す
コンソール
よく見るメッセージ
Your branch is ahead of 'origin/main' by 1 commit.
訳:あなたのブランチは1コミット分、'origin/main'より進んでいます。
リモートブランチにないコミットが 1 つあることを意味しています。これは、ローカルリポジトリに変更を加えてもまだサーバーに反映されていないことを意味します。リモートブランチの変更を取得するためには、まずその変更をプルする必要があります。
運用上の注意
- 極力、異なるブランチで同じファイルを編集しない
- コンフリクト防止
- pullやmergeする前に変更中の状態をなくしておく(commitやstashをしておく)
- pullするときは、pullするブランチに移動してからpullする
- detached HEAD にならないようにする
- その状態で他のブランチにチェックアウトすると、コミットが消滅する
- 過去のコミットIDを直接指定してチェックアウトするとなってしまう