gitcommandmatome

gitコマンドまとめ

おつかれさまです。otapediaのotaです。

毎度毎度、ググってしまうので、自分用によく使うgitコマンドをまとめておく。都度更新。

コマンドまとめ

リモートリポジトリをコピー

git clone githubなどのリモートリポジトリのURL

今どこのブランチにいるか確認

git branch

ブランチの作成

git checkout -b ブランチ名

ブランチの移動

git checkout ブランチ名

ブランチ名の変更

# 今いるブランチの名前を変える
git branch -m 変更するブランチ名

# 別のブランチの名前を変える
git branch -m 古い名前 新しい名前

リモートブランチをローカルで取得

git checkout -b ブランチ名 origin/取得したいブランチ名
ex) git checkout -b master origin/master

差分の確認

# 変更したがまだ add していない分
git diff

# add 済みの分
git diff --staged

最新のリモートリポジトリの状態をローカルリポジトリに取得

git fetch

変更をステージングエリアに追加

git add

ex) 
- 差分を全て追加
git add . 

- ファイルを指定して追加
git add app/views/users/show.html.erb

ローカルリポジトリに保存

git commit -m "コミットメッセージ"

ローカルリポジトリをリモートリポジトリにアップロード

git push origin ブランチ名

# 初回は -u を付けておくと、次からは git push だけで済む
git push -u origin ブランチ名

commit情報を確認

git log

# 1行ずつ、枝分かれも見える形で
git log --oneline --graph --all

任意の gitコミットを、作業中の HEAD に追加

git cherry-pick [コミットID]
※ git log でコミットIDを確認

switch と restore

ここから追記。Git 2.23 以降、checkout の役割が2つのコマンドに分かれました。

checkout は「ブランチを移動する」と「ファイルの変更を元に戻す」という全く違う仕事を1つのコマンドが兼ねていて分かりにくかったので、それぞれ switchrestore に整理された、という経緯です。

# ブランチを移動する
git switch ブランチ名

# ブランチを作って移動する(checkout -b と同じ)
git switch -c ブランチ名

# 直前にいたブランチに戻る(これが地味に便利)
git switch -

リモートにしか無いブランチも、origin/ブランチ名 が存在すれば git switch ブランチ名 だけで勝手に追跡ブランチを作ってくれます。上に書いた git checkout -b ブランチ名 origin/ブランチ名 を打たなくてよくなりました。

ファイルを元に戻す方はこちら。

# 変更を捨てて、最後のコミットの状態に戻す
git restore ファイル名

# add を取り消す(ステージから下ろす。変更自体は残る)
git restore --staged ファイル名

checkout も今まで通り動くので慌てて覚え直す必要はないですが、git restore --stagedgit reset HEAD ファイル名 より分かりやすいので、これだけでも使う価値があります。

やり直したいとき

一番ググるのがこのあたりなので、まとめておきます。

直前のコミットをやり直す

# メッセージだけ直す
git commit --amend -m "新しいメッセージ"

# 直前のコミットに、今の変更を混ぜる(メッセージはそのまま)
git add .
git commit --amend --no-edit

コミットを取り消す

# コミットだけ取り消す(変更はステージに残る)
git reset --soft HEAD~1

# コミットを取り消す(変更は残るが、ステージから下りる)
git reset HEAD~1

# コミットも変更もまるごと消す ※戻せません
git reset --hard HEAD~1

--hard は本当に消えるので、打つ前に一呼吸おいてください。

すでにpushしたコミットを取り消す

この場合は reset ではなく revert を使います。打ち消すためのコミットを新しく積むので、履歴が壊れません。

git revert [コミットID]

共有ブランチでは基本的にこちらです。

作業を一時的に退避する

「他のブランチを見たいけど、今の変更はまだコミットしたくない」というときに使います。

# 今の変更を退避する
git stash

# 新規ファイルも一緒に退避する
git stash -u

# 退避したものの一覧
git stash list

# 最後に退避したものを戻す
git stash pop

git stash pop は戻すと同時に退避リストから消えます。残しておきたいときは git stash apply です。

ブランチを消す

# ローカルのブランチを消す(マージ済みのものだけ)
git branch -d ブランチ名

# マージしていなくても強制的に消す
git branch -D ブランチ名

# リモートのブランチを消す
git push origin --delete ブランチ名

push が拒否されたとき

--amendrebase で履歴を書き換えたあとは、普通の push が拒否されます。そこで force を使うことになるのですが、

# ❌ 他の人のpushを巻き込んで消す可能性がある
git push --force

# ⭕ 自分が最後に見た状態から変わっていなければ push する
git push --force-with-lease

--force-with-lease を使ってください。 自分がfetchした後に他の人がpushしていた場合、こちらは失敗してくれます。--force は問答無用で上書きするので、共同作業では事故のもとです。

困ったときの reflog

最後に一番助けられているやつを。

git reflog

これはHEADがどう動いたかの全履歴です。git reset --hard で消したはずのコミットも、ここには残っています。

# reflog でIDを確認して
git reflog

# その時点に戻る
git reset --hard [コミットID]

「やらかした」と思ったら、まず git reflog を打ってみてください。だいたい助かります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です