Knowledge Base

お知らせや身辺のことを綴っています。

手を動かして覚える Git

Work in Progress な記事!内容は増えたり変わったりする。

git add

次のコミットに投じたいファイルをステージして、Index に登録する作業。

git add [file | directory] で追加する。 --help オプションを付けると公式のマニュアルが立ち上がるやいなや、大量のオプションに対する解説があって辟易してしまうので、自分のような初心者は読者に寄り添うように書いてくれているGitHub による二次資料を読んで理解するのが良いかなと感じた。

変更点を確認しつつステージする

git add -p でファイルに加えた変更点を確認しつつ、ステージすることができる。

git add -A するのは考えた方が良い

そもそも git add -A は便利だけど、.gitignore にリストされてないもの以外は容赦なくステージされてしまう点で、リスクも伴う作業としてとらえたほうが良い。1つずつ追加するのが一番安全だけど、もし使う場合はそれぞれを使い分けても良いかもね。

https://github.com/git-guides/git-add#deciding-to-stage-all-files

git commit

HEAD 時点における、プロジェクトのスナップショットを作る。コミットするファイルやフォルダは git add コマンドで追加されている必要がある。

git commit -m "a descriptive commit message"

–amend オプションを使ってコミットを改正

--amend オプションを用いることで、リモートにプッシュしていないコミットに限って、直前に行ったコミット内容を修正したり、コミットメッセージを修正したりできる。

例えば、git add でステージに追加し忘れてしまったといった軽微な問題であれば

こうすることで、コミットメッセージはそのままに、修正されたコミットを発行することができる。

そもそも論として、安全のためには

コミットする前には git status を使って何がこれからコミットされるのか、知ってからコミットするべき。また、git-addgit-rmgit-commit といった様々な場面で --dry-run (もしくは -nオプション )を活用できる。安全のためにこれを使って動作検証するのもおすすめ。

git revert

過去にコミットした履歴のデータを損なうことなく、ある時点における commit を取り消す。チームとかで開発したり、オープン性が求められるときはこっちを使った方が良いとされている。

git reset

機密情報をコミットしたり、コミットされるべきでないファイルをコミットしてしまったときなどに使えるコマンド。基本的には HEAD ポインターをある時点におけるコミットに移動して作業を行うことになる。

git add の undo は、git reset HEAD にあたると言える。まだコミットしていない変更はそのままにして

いろいろなパターンがあるので紹介する。git reset --mixed HEAD でもOK。

コミットを取り消す場合

git reset [--soft | --mixed] HEAD^

以下の例ではすべてのファイルを一旦ステージしてしまった後に .gitignore を変更してしまった場合、上のコマンドが使える。(別にこれくらいであれば git add --amend でもできるけど)

–soft と –mixed の違い

状況に応じて使い分けられると良い。

https://stackoverflow.com/questions/3528245/whats-the-difference-between-git-reset-mixed-soft-and-hard

すべてのファイルへの変更をなかったことにして戻す

git reset --hard HEAD^

コミットしていない変更は全て水の泡になる作業。^ は現在のコミット位置より1個前のコミットを指す位置指定子。HEAD^ のようにして使用する。つまり、上のコマンドは一個前のコミットにリセットするということになる。

HEAD : 現在のコミット位置。

git checkout

もうちょっと詳しく書くよ~ん

git log

過去のコミットを閲覧する。

git log --graph --oneline

--oneline オプションを使うと一行に表示できる。