Gitをコマンドラインでガッツリ使うことになったので備忘録
今までGUIツールに頼りっぱなしだったのだが、
直近の案件でかなり大きい規模の開発に入り、
GUIツールだけでは賄いきれない事案があり(上手く使えばできるのかもですが)
備忘録としてまとめておきます。
git status
現在ブランチやらソースの更新状況やらを確認できる。
何か操作したらとりあえずgit status
git add
更新したファイルや追加したファイルをステージングすることができる。
git statusで確認してgit addで追加
追加するにはパスを指定
特定のファイルのみ追加したい場合は
git add hoge.txt hogehoge.txt
というような形でまとめて追加もできる。
git addで追加する時に親ディレクトリを指定してあげると、
子の更新をまとめて追加出来る。
git diff ・ git diff origin/hoge
コミットする前に更新したファイルの差分を確認したい時に使う。
現在のローカルの状況とリモートの差分を確認したいときは、
git diff origin/hoge
pushする前に現状のcommit分とリモートの差分を確認したい場合
git diff リモート名/ブランチ名..HEAD
git checkout
ブランチ作成・移動・削除などを行うことができる。
現在は移動や作成に関してはswitch
削除関連に関してはrestore
こちらを使うことができるが、
どちらでも良さそうな気がする。
git checkout {ブランチ名}
# 対象ブランチに切り替える
git checkout -b {ブランチ名}
# 対象ブランチを新規作成し、切り替える
git checkout {ファイルパス} [
# ワークツリーにある対象ファイルの変更を取り消す
git checkout .
# ワークツリーにある全ファイルの変更を取り消す
git checkout -
# 直前のブランチに戻る
git switch {ブランチ名}
# 対象ブランチに切り替える
git switch -c {ブランチ名}
# 対象ブランチを新規作成し、切り替える
git switch --detach refs/tags/{タグ名}
# 対象タグに切り替える
git switch -
# 直前のブランチに戻る
git restore {ファイルパス}
# ワークツリーにある対象ファイルの変更を取り消す
git restore .
# ワークツリーにある全ファイルの変更を取り消す
git restore --source {コミットID} {ファイルパス}
# 対象ファイルの変更を対象コミットに戻す
git commit --amend
git commitはお馴染みのコマンドだが、
オプションで--amendを使うと、
直前のコミット内容を上書きする形で編集することができる。
例としてあげると、
- コミットメッセージを間違えた時
- コミット数を増やしたくない時
などで使用する。
--amendした後は、
強制プッシュしないとプッシュが通らない。
git log
commit履歴を参照できる。
git revert
commitの取り消しができる。
# コミットログを調べる
$ git log
# 取り消すコミットを作る
git revert 間違えたコミットID
git rebase -i HEAD~
コミット数が増えすぎてまとめたいとか、
余計なコミットをあげてしまったので消したいとか、
色々とすることができます。
git rebase -i HEAD~
# HEADの後に遡りたい数の数字を入れることで任意の数遡ることができる
# 4件コミットあげていたならgit rebase -i HEAD~4で4件分遡れる
まとめたい時はまとめたい時はs(squash)
削除したいときはd(drop)
rebase -i後はcommit --amendと同様に、
強制pushしないとpushすることができない。
git push --force-with-lease
強制pushは強制pushでもpush -fと違い、
ローカルとリモートを比較して、
ローカルが最新でなければ失敗するという
ちょっと安全なpush -f
基本的にはこっち使ったほうが良さそう。
git reset HEAD
git add の全ファイル取り消し。
git reset HEAD hogehoge.txt
これで特定のファイルのみ取り消しできる。
git reset --hard origin/hoge
rebaseやらなんやらやって、
リモート環境がおかしくなってローカルの方が正しいみたいな場合、
git reset --hard origin/hoge
これでリモート環境をローカル環境に強制上書きできる。
git reset --hard HEAD@{}
ローカルに間違ってgit pullしてしまい、
取り込みたくないでコミットをマージしてしまった場合、
git reset --hard HEAD@{}で過去に戻ることができる。
git reflogでlogを出す事ができるので、
戻りたいナンバーを{}内に入れることで、
その時の状態に戻ることができる。
git clean -df
なんやかんや色々やってgit statusをすると、
Untracked filesができてしまう事がある。
これが不要であればgit clean -dfで削除することができる。
ファイルのみ削除したい場合は -f
ディレクトリのみ削除したい場合は -d
git branch
主にブランチを削除・renameしたいときに使う。
git branch
# ローカルブランチの一覧を出力する(チェックアウト中のブランチに * が付く)
git branch -a
# ローカルブランチとリモートブランチの一覧を出力する
git branch {ブランチ名}
# 対象ブランチを新規作成する(チェックアウトしない)
git branch -d {ブランチ名}
# 対象ブランチを削除する
git branch -d -f {ブランチ名}
# 対象ブランチを 強制 削除する
git branch -D {ブランチ名}
# 対象ブランチを 強制 削除する
git branch -m {旧ブランチ名} {新ブランチ名}
# 対象ブランチをリネームする
git branch -m 古いブランチ名 新しいブランチ名
# 今いるブランチの名前を変更する場合
git branch -m 新しいブランチ名
git pull origin develop
今いるブランチに、最新のdevelopの内容を取り込みたい場合に使う。
git pull --rebase origin develop
こっち使って!!みたいなの多いけど、
rebaseすると今pushしてる分消えたりするので
(自分がrebaseちゃんと理解してないからかもですが)
git pull origin developでよくね???となっている。
汚くなるなら後から修正すればいいし、
消えて訳分からなくなるよりはマシ
番外編
E325: ATTENTIONなんたらかんたらみたいな表示が出てcommitできない
操作ミスって前回のコミットメッセージが残ってるけどどうしますーーー???
みたいな感じなので、
Swap file ".git/.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
と表示されているはずなので、
Dを入力してEnterで削除するとcommitできるようになる(はず)
マージしたけどやめたい場合
コンフリクトした場合(未編集)
git merge --abort
コンフリクトを解消しようとしたがやめたい場合(編集済み)
git reset --hard HEAD
マージ完了したけどやめたい場合 その1
git revert -m 1 <merge_commit>
マージ完了したけどやめたい場合 その2
git reset --hard ORIG_HEAD
参考記事
Discussion