😸

Gitをコマンドラインでガッツリ使うことになったので備忘録

2021/07/09に公開

今まで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

参考記事
https://qiita.com/uhooi/items/c26c7c1beb5b36e7418e

https://qiita.com/kure/items/4b83cc6919a428146c7f

https://qiita.com/wMETAw/items/5f47dcc7cf57af8e449f

https://qiita.com/itmaromaro/items/2a87135485d84899bc1c

https://qiita.com/chihiro/items/5dd671aa6f1c332986a7

https://www-creators.com/archives/5314

https://qiita.com/maejimayuto/items/30bfab250186a00ae884

https://qiita.com/shibukk/items/8c9362a5bd399b9c56be

https://qiita.com/yanutetsu/items/bdafe41594327a422b00

https://qiita.com/chihiro/items/5dd671aa6f1c332986a7

https://qiita.com/chihiro/items/f373873d5c2dfbd03250

Discussion