Open4

業務とか個人開発で使ったGitコマンドまとめ

nopenope

定番どころ

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   main1.cpp

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main2.cpp

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	"main3.cpp"

追跡されているファイルの状態がわかる
Changes to be committed まだコミットされていない状態
Changes not staged for commit 変更されたが、まだ git add されていないファイル
Untracked files Gitに追跡されていない新規ファイル

$ git add .
$ git add *

変更をステージングする
.だと全ファイルをステージング、*だと隠しファイル以外をステージング

$ git commit -m "text"
$ git commit --amend -m "text"

ステージングエリアにある変更を確定し、コミットを作る
--amendをつけるとコメントメッセージを変更できる

nopenope
$ git branch
$ git branch -r
$ git branch -a

ブランチの一覧を表示する
rオプションでリモート追跡ブランチ、aオプションでローカルとリモート追跡ブランチ両方を表示させる

$ git branch -d [ブランチ名]
$ git branch -D [ブランチ名]

ブランチの削除をする
dオプションでマージされたブランチを削除、Dオプションで強制的にブランチを削除

$ git branch -m [新しいブランチ名]
$ git branch -M [新しいブランチ名]

現在のブランチの名前を変更する
Mオプションで強制的に変更する

$ git checkout [ブランチ名]
$ git checkout -f [ブランチ名]

ブランチを変更する、fオプションをつけることで強制的にブランチを切り替える

$ git switch [ブランチ名]
$ git switch -f [ブランチ名]

ブランチを変更する、基本的にgit checkoutと同じだが、ブランチを切り替えるという役割しかないのでブランチを切り替えるだけの時はgit switchが推奨される

nopenope
$ git fetch

リモートにある変更をローカルに取得する
具体的にはリモート追跡ブランチに最新の状態を反映させる
mainブランチはorigin/mainブランチに反映される

$ git merge [ブランチ名]

現在のブランチに対象ブランチの変更を取り込む

$ git pull [リモートリポジトリ] [ブランチ名]

リモートにある変更をローカルに取得し、その取得データをブランチにマージさせる
仮にmainブランチにいる場合、

$ git fetch
$ git merge origin/main

と同等である

ちなみにすでにgit pullをする前に該当ブランチでコミットをしていた場合、

$ git pull --rebase [リモートリポジトリ] [ブランチ名]

とすることで先にリモートの変更コミットを取得し、その上からローカルで作ったコミットを上乗せすることができる

nopenope
$ git reset --soft [コミット]
$ git reset --mixed [コミット]
$ git reset --hard [コミット]

softオプションはコミットのみを取り消して、特定のコミットまで巻き戻す
mixedオプションはコミットを取り消して、特定のコミットまで巻き戻す。ステージングも取り消す
hardオプションは特定のコミットまで巻き戻してそれまでのコミットを取り消す(変更も取り消す)

$ git reset HEAD

ステージングを取り消すが、変更はそのまま
HEADで現在のコミットを参照しているため、コミットには影響を与えない
オプションをつけない場合はmixedオプションになっている