Zenn
🌐

【Git】ヘビロテ必至!便利コマンド

2024/12/25に公開

はじめに

Subversionなんて今のイケイケ・エンジニアは知らんですよね
↑ 昔のバージョン管理システム

新卒の頃に使ってて、しばらくIT業界離れてて出戻ったら世界はGitになってました
便利な世の中になったもんですわ

便利コマンド

まだ短いGit人生ですが、かゆい所に手が届く、そんな便利だと感じたコマンドを集めました

checkout

直前のブランチに切り替えるぜ

git checkout -

ブランチ名を指定しなくても-で直前のブランチに切り替えられます

ちなみにn個前にいたブランチに切り替えるには

git checkout @{-n}

2個前のブランチなら

git checkout @{-2}

使ったことはまだない

あの子がほしい

とあるブランチの特定ファイルだけ、今のブランチに持ってきたい

git checkout <とあるブランチ> -- <あの子のファイルパス/ファイル名>

※途中の--は省略可能

今いるディレクトリに注意。ルートにいないとパスの指定でエラーになる

error: pathspec 'xxx.xx' did not match any file(s) known to git

stash

思い出はちゃんとしまっておきたい

git stash save -u <message>

save:メッセージ付ける
-u:untrackedファイル(新規作成ファイル)も退避

今のブランチで修正中、未コミットのファイルあるけど、別ブランチで作業したい!
checkoutした時に競合するファイルがあると↓みたいにgitに怒られるし、

error: Your local changes to the following files would be overwritten by checkout:
       xxx.xx
Please commit your changes or stash them before you switch branches.
Aborting

修正中のファイルは切り替え先ブランチに持って行きたくない

そんな時はstash、stash!

個人的に、元に戻す時はVScode→ソース管理→stashesから戻したいstashを右クリック→Applyで反映している
Popしないから削除しないとどんどんゴミ溜まってくので注意

つまりは男は名前をつけて保存ってことです

cherry-pick

えーと、それとあれをください

git cherry-pick <それのコミットid> <あれのコミットid>

特定のコミットだけ今のブランチに取り込みたい時、ありますよね

こっからここまでください

git cherry-pick <こっからのコミットid>^..<ここまでのコミットid>

大人買いしたい時、ありますよね

あるブランチにコミットした数々の修正を取り込みたい
けどブランチごとマージしようとすると、ベースが違うと意図してないコミットも取り込んでコンフリクト、、、あるあるですよね

そんな時は頭とケツのコミットidを指定すれば欲しいものだけゴッソリ取り込めます
キャレット^を忘れずに
※忘れると頭のコミットは含まれない

やっぱキャンセルで

なんかコンフリクトして怒られたんでキャンセルしたい時、ありますよね

error: Your local changes to the following files would be overwritten by merge:
        xxx.xx
Please commit your changes or stash them before you merge.
Aborting
fatal: cherry-pick failed

次の呪文でキャンセルして出直しましょう

git cherry-pick --quit

reset

あの頃に戻りたい

いろいろコミットした時期もあったが、今となっては全部なかったことにしたい

git reset --hard origin/<今のブランチ名>

リモートの状態で強制的に記憶を書き換えてくれます

あの人になりたい

git pullでリモート追跡ブランチを更新しておく
以下のコマンドでなりたいブランチを指定すれば強制的になれます

git reset --hard origin/<あの人のブランチ名>

そのままpushするとコンフリクトで怒られるので、下記コマンドで強制的にpushする

git push -f

mv

この際、名前を変えて生きていく

ファイルのリネームや移動はエディタ上で変えるとGit的には削除&新規作成の認識になる
つまり、今までの変更履歴が消えてしまう
人生やり直すならこっちでもいいかもしれない

ただ、今まで生きた軌跡は残しておきたい時、ありますよね

git mv <ファイルパス/ファイル名> <変更後ファイルパス/変更後ファイル名>

これで今までの数々の遍歴が残ったままになります

さいごに

Gitには幾重もの世界線が重なっているんだなーと感じ、なんだか自分の人生を見つめるいい機会になった気がします

Goals Tech Blog

Discussion

ログインするとコメントできます