Open15

Git Tips & Trouble Shooting

kabeckabec

リモートに登録されているブランチの確認

git fetch
git branch -a

表示されるブランチ名をgit clone, repo init時に-bオプションで指定することで特定のブランチの最新環境を取得することができる。

git clone -b [対象のブランチ名] [gitプロジェクト名]
kabeckabec

コミット関連

直前のコミットのコミットメッセージを編集

git commit --amend

コミットメッセージを編集する以外に、上記コマンド実行前にgit addをすることで
コミットファイルの追加も行うことができる。


コミットメッセージのprefix

コミットメッセージの接頭に接頭辞(prefix)を使うことで、コミットメッセージに含める情報を明確にすることができる。
こちらを参考にコミットメッセージを検討すること


references

kabeckabec

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

kabeckabec

最新commitにtagを付けてリモートに反映

git tag v1.0
git push -u origin main v1.0
kabeckabec

削除・取り消し関連

編集内容を取り消す

以下で全てのファイルの更新を元に戻すことが可能

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

kabeckabec

git clone の高速化

--depthオプションを付与することで指定したコミット数で刈り取ることができる。
例えば、以下のコマンドではmainブランチにある最新のコミットだけを取得するので取得の時間を短縮できる。

git clone [gitプロジェクト名] --depth 1

どのような時に使う?

過去コミットを参照しない作業であるなら--depth 1で取得するのがベター。


references

kabeckabec

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

kabeckabec

git diff で新規ファイルも確認したい

git diffは追跡対象となっているファイルの差分を確認するコマンドなので、新規ファイル(未追跡ファイル)は表示されない。その場合は以下のように-Nオプションを使う。

git add -N .
git diff

git add -Nした後にコミットする際は改めてgit addしてからgit commitする必要がある。
詳細は参考記事を参照。

git diff でステージングしたファイルを確認

git diff --cachedで確認可能。


references

kabeckabec

変更を一時的に退避

git stashを使えばよい。

git stash

退避させた変更を元に戻す場合は以下

git stash pop

statshした変更を一括で削除したい場合は以下

git stash clear

参考記事が綺麗にまとめられているので詳細を知りたい場合は参照。


reference

kabeckabec

git mergeの手順

  1. ブランチの作成と移動
    git checkout -b work
    
  2. commit作業後、作成したブランチをgitに登録する際は以下
    ※登録しない場合は実行しない
    git push origin work
    
  3. 作成したブランチのコミット内容をmainブランチにマージ
    git checkout main
    git merge work
    
  4. git logでマージされているか確認後、git push
    git push -u origin main
    

references

kabeckabec

git revert 手順

  1. git logrevertしたいcommit idを検索
  2. 検索後、git revert [commit id]でcommitを取り消し
  3. git showgit logで確認

git revertは対象のコミットを打ち消すようなコミットを作成するコマンドなので、
最終的にgit pushしないとリモートに取り消し内容が反映されないので注意。
また、対象のコミットで編集したファイルが以降のコミットで編集されている場合はコンフリクトが発生するので注意。


references

kabeckabec

部分的にステージングしたい

git add -pで同じファイル内の変更箇所ごとにステージングするかを対話形式で選択することができる。
詳細は参考記事を参照。


references