基本的な git 操作コマンド一覧

基本的な git 操作コマンド一覧

2023/11/08 21:00:00
Program
Git

前提 #

  • 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