基本的な git 操作コマンド一覧
2023/11/08 21:00:00
前提 #
- fish 用
bash の場合、一部動作しない
初期設定 #
※プロジェクトに従って設定したほうがいい。ここでは global 設定にしているが、local 設定としてもいい
# 勝手改行コードを無効
$ git config --global core.autocrlf false
# push動作をsimple(デフォルト)
$ git config --global push.default simple
# 大文字小文字を区別(linux向け,windows os区別できない)
$ git config --global core.ignorecase false
# 日本語文字化け対応
$ git config --global core.quotepath false
# pull時にリベースを強制しない(ワーニング削除)
$ git config --global pull.rebase false
# ファイルパーミッションを保持する(linuxだけ、windows,linux共通開発の場合はfalseがいいかも)
$ git config --global core.filemode true
# git 使用者名
$ git config --global user.name "John Doe"
# git 使用者email
$ git config --global user.email "john_doe@xxx.com"
# editor を vim にする(デフォルトがosによって違う)
$ git config --global core.editor vim
# パスワード保持方法
$ git config --global credential.helper store
# ※たぶんやるべき。初期ブランチを master ブランチからmainに変更
$ git config --global init.defaultBranch main
# git エイリアスコマンド追加
# + 管理外ファイルを表示
$ git config --global alias.untracked 'ls-files --others --exclude-standard'
# + gitignoreファイルを表示
$ git config --global alias.ignored 'ls-files --other --ignored --exclude-standard'
# + グラフ表示
$ git config --global alias.graph "log --graph --date-order -C -M --pretty=format:'<%h> %ad [%an] %Cgreen%d%Creset %s' --all --date=short"
管理開始 #
$ git init
# リモートリポジトリ設定追加
$ git remote add origin <リモートリポジトリアドレス>
クローン #
リモートリポジトリからクローンする
$ git clone [リモートリポジトリ]
差分 #
$ git diff
# ステージングされた差分
$ git diff --cached
# ブランチ間の差分
$ git diff [開始ブランチ] [終了ブランチ]
# 差分ファイル一覧
$ git diff --name-status [開始ブランチ] [終了ブランチ]
# カレントブランチと終了ブランチ間の差分ファイル一覧
$ git diff --name-status [終了ブランチ]
ステージング #
.はファイル名、パス指定可能
$ git add .
ステージ取り消し #
.はファイル名、パス指定可能
$ git reset HEAD .
コミット #
ローカルリポジトリに登録
$ git commit -m "message"
# 上書きコミット(push済みのコミットに対してはすんな)
$ git commit --amend
プッシュ #
リモートリポジトリに登録
push のあとに -u を付加するとアップストリームも自動設定される(追跡) ※origin はリモート示す名前
$ git push origin [ブランチ名]
ブランチ作成 #
$ git checkout -b [ブランチ名]
# 特定コミットからブランチ作成
$ git checkout [コミットハッシュ] -b [ブランチ名]
ブランチ変更 #
$ git checkout [ブランチ名]
ブランチ一覧 #
$ git branch -avv
ブランチ削除 #
-D 強制削除
-d マージ済みの場合、削除
$ git branch -D [ブランチ名]
ローカルのブランチ名変更 #
※リモートにpush済みの場合は注意
$ git branch -m [古いブランチ名] [新しいブランチ名]
$ git branch -m [新しいブランチ名]
スタッシュに一時退避 #
-u はuntrakingファイルも対象になる
$ git stash save -u "message"
スタッシュ一覧 #
$ git stash list
スタッシュから作業エリアに戻す #
# スタッシュ履歴削除される
$ git stash pop stash@{番号}
# スタッシュ履歴削除されない
$ git stash applay stash@{番号}
マージ #
$ git merge [ブランチ名]
マージがコンフリクトして手動解決後、マージ続ける場合 #
※以下でなくても $ git commit とやれば同じくマージ完了してコミットもされる。おそらく他の–continueも同じ
$ git merge --continue
マージしたらコンフリクトしたんでやんぺ。 #
$ git merge --abort
リベース(マージ) #
$ git rebase [ブランチ]
リベース(マージ)したブランチがすでにpushされている場合、強制pushが必要 #
$ git push -f [ブランチ]
他メンバがリベース(マージ)されたブランチをローカルブランチ取得している場合、強制リセットが必要 #
$ git reset --hard origin/[ブランチ名] <--- リモートブランチでローカルブランチを強制上書き
マージがコンフリクト解消しようと頑張ったけどやっぱりやんぺ #
$ git reset --hard HEAD
上記と同じ方法で、特定(^の数分)のコミットまで戻す #
履歴なくなるのでpushしてる場合は使用禁止
–soft とやると作業エリアは変更されない
$ git reset --hard HEAD^
上記と結果同じことだが、特定のリビジョンまで戻す #
$ git reset --hard [ハッシュ値]
特定のコミットを打消し #
$ git revert [ハッシュ値]
特定のマージコミットを打消し #
1 で期待したブランチ側でない場合、2でやり直す(親ブランチ指定)
※たぶん、ブランチ元にマージしてる場合は1、ブランチに取り込んでるマージは2 になると思う…
$ git revert -m 1 [ハッシュ値]
リバートがコンフリクトして手動解決後、リバート続ける場合 #
$ git revert --continue
特定のブランチからコミットを取り込む #
$ git cherry-pick [ハッシュ値]
チェリーピックがコンフリクトして手動解決後、マージ続ける場合 #
$ git cherry-pick --continue
タグ付加 #
$ git tag -a [タグ名] -m 'message'
$ git push origin [タグ名]
タグ一覧 #
$ git tag
ログ確認 #
$ git log
ログ+変更内容確認 #
$ git log -p
グラフ表示(tig) #
$ sudo apt install tig でインストール可能
$ tig
$ tig [ブランチ名]
現在のgit管理対象をエクスポート #
$ git archive --format=zip HEAD > ../now.zip
ブランチ間の差分を取得する #
$ git archive ticket_[終了ブランチ] (git diff --name-only [開始ブランチ] [終了ブランチ] --diff-filter=ACMR) -o archive.zip