Git Tips & Trouble Shooting
記事として投稿するほどまとまっていないものを書き置きする。
参考リンク集
- Gitのコミットメッセージの先頭につけた方が良い単語リスト(prefix集) #Git - Qiita
- 【Git】マージにおけるfast-forwardとnon-fast-forwar - AUTOVICE | 坂井光太郎のポートフォリオサイト
- Gitを使いこなしたい!〜仕組みとコマンド24選〜 #初心者 - Qiita
- [Git]コミットの取り消し、打ち消し、上書き #Git - Qiita
- Gitで部分的にコミットする方法 #Git - Qiita
- え?まだgit checkoutしてるの?
- gitで他ブランチの特定のコミットを取り込む方法 #Git - Qiita
- Gitコマンド早見表 #Git - Qiita
- git log を見やすくする #Git - Qiita
- gitの便利なfilterまとめ - webネタ
- 【git】マージしたけどやっぱりやめたい時のやり方4種類 #Git - Qiita
- Gitで今のブランチの派生元ブランチを特定する #Git - Qiita
- gitで特定ファイルを特定のcommitに戻す #Git - Qiita
- 色々な git stash #Git - Qiita
git pushでerror: failed to push some refs to ...
gitを使いたての頃によく遭遇してしまっていたエラー
リモートのほうがコミットが進んでおり、ローカル環境が最新でないのが原因。
リモートの情報をローカルに統合すればOK。
git fetch
git merge
git push -u origin main
git pull
はgit fetch
, git merge
を同時に行うので以下でもOK。
git pull
git push -u origin main
references
- git pushエラー:error: failed to push some refs to…はリモートの方が新しいのでプッシュできないという意味
- 【初心者向け】git fetch、git merge、git pullの違いについて
- git pull と git pull –rebase の違いって?図を交えて説明します!
- Git基本操作。ローカルでの作業からリモートリポジトリのマージまで。
- 【Github】git pushの-uオプションとは何か?上流ブランチやupstreamについて実例で解説|–set-upstreamとの違いや上流ブランチの確認・設定方法(初心者向け、わかりやすい)
- 【Git】git mergeコマンドで異なるブランチの更新分を取り込む
- 今さらながらgit pull –rebase origin developについて調べた
- なぜrebase後に強制プッシュをする必要がある
- fast-forwardマージから理解するgit rebase
リモートに登録されているブランチの確認
git fetch
git branch -a
表示されるブランチ名をgit clone
, repo init
時に-b
オプションで指定することで特定のブランチの最新環境を取得することができる。
git clone -b [対象のブランチ名] [gitプロジェクト名]
コミット関連
直前のコミットのコミットメッセージを編集
git commit --amend
コミットメッセージを編集する以外に、上記コマンド実行前にgit add
をすることで
コミットファイルの追加も行うことができる。
コミットメッセージのprefix
コミットメッセージの接頭に接頭辞(prefix)を使うことで、コミットメッセージに含める情報を明確にすることができる。
こちらを参考にコミットメッセージを検討すること
references
git log 関連
コミットメッセージとファイルの確認
git log --name-status
log表示をカスタマイズ
以下のオプションを付与するとコミットのハッシュ (短縮版)とコミットメッセージを抽出してlogを表示することができる。
git log --pretty=format:'%h %s'
--oneline
オプションを使ってもほぼ同様のlogが出力されるが、コミット時のブランチ情報も合わせて表示されてしまう。
git log --oneline
差分も含めてlogを確認
git log -p
表示するlog数を制限したい
git log -n [表示したいlog数]
references
最新commitにtagを付けてリモートに反映
git tag v1.0
git push -u origin main v1.0
削除・取り消し関連
編集内容を取り消す
以下で全てのファイルの更新を元に戻すことが可能
git checkout .
git add
した後でも可能、編集内容は削除されるので注意。
個別に取り消すなら以下
git checkout -- [ファイルパス]
上記コマンドはgit status
時にも表示されるので見たことはあるはず。
2024/03/04追記
git restore
で同じアクションが実行できる。こちらのほうが直感的でわかりやすい。
git restore [ファイルパス]
untracked fileを削除
git checkoutでは既に存在している、git的に言うと追跡(tracking
)されているファイルの場合に有効であり、新規ファイル・フォルダなどの追跡されていないファイルに対しては適用されない。
その場合はgit clean
コマンドを使う
git clean -df
-
-d
: 追跡対象外のディレクトリを削除を実行 -
-f
(--force
): 追跡対象外ファイルの削除を強制的に実行
addのみ取り消し
編集内容を残したうえでgit add
状態のみを取り消したい場合は以下
git reset .
2024/03/04追記
git restore
で同じアクションが実行できる。
git restore --staged [ファイルパス]
元のファイルを復元(restore)するので直感的にわかりやすい。
references
git clone の高速化
--depth
オプションを付与することで指定したコミット数で刈り取ることができる。
例えば、以下のコマンドではmain
ブランチにある最新のコミットだけを取得するので取得の時間を短縮できる。
git clone [gitプロジェクト名] --depth 1
どのような時に使う?
過去コミットを参照しない作業であるなら--depth 1
で取得するのがベター。
references
追跡対象となっているファイルを対象から外す
以下を参考。
どのような時に使う?
開発当初はリモートにアップロードしていたが、開発が進むにつれて必要になくなった時などに使う。
git reset 関連
直前のコミットを取り消したい
コミット、編集した内容を全てを取り消したい場合
git reset --hard HEAD^
コミットのみ取り消したい場合は--soft
オプションを使う。
git reset --soft HEAD^
特定のコミットまで戻す
git log
で戻したいcommitのハッシュ値を調べてから以下
# 戻したいcommitのハッシュ値を調べる
git reset --hard [ハッシュ値]
ハッシュ値は全て入力しなくても最低6 or 7桁目まで入力すればよい。
※リポジトリ中でコミットを一意に特定できる長さが6 or 7桁目までで十分なため。
一意なハッシュ値であることが
references
git diff で新規ファイルも確認したい
git diff
は追跡対象となっているファイルの差分を確認するコマンドなので、新規ファイル(未追跡ファイル)は表示されない。その場合は以下のように-N
オプションを使う。
git add -N .
git diff
git add -N
した後にコミットする際は改めてgit add
してからgit commit
する必要がある。
詳細は参考記事を参照。
git diff でステージングしたファイルを確認
git diff --cached
で確認可能。
references
変更を一時的に退避
git stash
を使えばよい。
git stash
退避させた変更を元に戻す場合は以下
git stash pop
statshした変更を一括で削除したい場合は以下
git stash clear
参考記事が綺麗にまとめられているので詳細を知りたい場合は参照。
reference
git mergeの手順
- ブランチの作成と移動
git checkout -b work
- commit作業後、作成したブランチをgitに登録する際は以下
※登録しない場合は実行しないgit push origin work
- 作成したブランチのコミット内容を
main
ブランチにマージgit checkout main git merge work
-
git log
でマージされているか確認後、git push
git push -u origin main
references
git revert 手順
-
git log
でrevert
したいcommit id
を検索 - 検索後、
git revert [commit id]
でcommitを取り消し -
git show
やgit log
で確認
git revert
は対象のコミットを打ち消すようなコミットを作成するコマンドなので、
最終的にgit push
しないとリモートに取り消し内容が反映されないので注意。
また、対象のコミットで編集したファイルが以降のコミットで編集されている場合はコンフリクトが発生するので注意。
references
部分的にステージングしたい
git add -p
で同じファイル内の変更箇所ごとにステージングするかを対話形式で選択することができる。
詳細は参考記事を参照。