8t's BBR

よくつまったあれこれをメモ

git基本コマンド

最近、将来的に必要になるであろうgitの勉強している。

だが、pushやpullやらプルリクやらよく迷うので
代表的なコマンドを復習ついでに簡単にまとめて残しておく


初期化コマンドと必須コマンド

git initリポジトリの初期化
 リモートからクローンする場合は必要ないから案外使わないかも


git add:インデックスにファイルを追加
 gitリポジトリのワーキングツリーでファイルを追加しただけでは、
 gitリポジトリの管理対象にはなっていない。つまり、commitできない。
 commitするためにも、先に必要。
 git add filenameとすれば、指定したファイルを追加するが、
 git add .とすれば、全部指定できるので便利。


git commitリポジトリの歴史を記録
 -mオプションをつけてそのあとに "comment" とすれば
 commentがコミットメッセージとなる。
 なければ、エディタが起動してコメントを書くことになる。
 --amendオプションで直前のコミットのコミットメッセージを修正できる。


git remote add:リモートレポジトリを登録
 例:git remote add origin https://github.com/userA/x-project.git
 とすれば、userAのx−projectのリポジトリをリモートリポジトリとして保存する
 (cloneしてきたときは、自動でoriginに追加されているらしい)
 アドレス間違えた時は、git remote set-url origin [url]で登録し直す


git push:リモートリポジトリに送信
 例:git push -u origin master
 とすれば、originリポジトリのmasterブランチに現在のブランチの内容を保存する。
 違うブランチをpushするには、最後にスペースをあけずに:[branch名]を追加。
 -uオプションで、今後git pullで、origin/masterから内容を取得できる。


git pull:最新のリモートリポジトリを取得
 例:git pull origin branchA
 とすれば、リモートリポジトリのoriginからbranchAの情報を最新に更新
 開発を始める前に更新がないか確認しとかなければ、後々面倒くさいことなったり
 するので大事なコマンド


必須ではないけど大事なコマンド

git status:現在の状態を確認
 commit後にこれを実行して「nothing to commit, working directory clean」と出れば
 だいたいうまくいっている。絶対必要な操作ではないが、確認は大事。


git log:コミットログを確認
 リポジトリにコミットされたログを確認。
 ファイルやディレクトリを指定すれば、それに関するログを確認できる。
 -pオプションで差分を確認できる。これも絶対必要な操作ではないがってやつ。
 --graphオプションでブランチを視覚的に確認する。


git diff:変更差分を確認
 ワークツリー、インデックス、最新コミット間の差分を確認できる。
 何も指定しなければワークツリーとインデックスの差分、
 HEADと指定すればワークツリーと最新コミットとの差分、
 がそれぞれわかる。
 commitする前に、差分を確認する癖はつけたほうがいいらしい。


git branch:ブランチを一覧表示
 新しいブランチ名を指定すれば、その名前のブランチを作成できる


git checkout:ブランチの切り替え
 ブランチを指定して切り替える。
 -bオプションで新規のブランチを作成して、それに切り替える。
 -のみで1つ前のブランチに戻れる。


git merge:ブランチをマージする
 指定したブランチを、現在のブランチにマージする。
 --no--ffオプションで、マージコミットを作成できる
 (ブランチからマージしたことを明確に残せる)。
 8/1追記:このオプションないって言われた。要調査。



git reset:歴史を戻る
 タイムマシンではない
 --hardオプションに、戻りたい場所のハッシュ値を与えることでそこに戻れる。
 ハッシュ値git loggit reflogで参照できる。


git rebase -i:歴史を押しつぶして改変
 コミット後に些細なミスを発見し、それを修正したコミットをする時とかに使う。
 例えばHEAD~2とすると、現在のブランチ(HEAD)を含めた2つの歴史を
 対象として改ざんする。
 この時、エディタが立ち上がるが押しつぶす歴史のpickの記述をfixupに変える。
 この操作は怖い気がするのだが、どうなんだろう