わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

1日目: Gitまとめ

業務で一番何使うかなって考えたら、やっぱりGitだと思う。 来年も絶対使ってるから、今のうちによく使うコマンドとオプションをまとめておく。
(大体transitive.info - Git 使い方 見出し一覧を見れば分かるけども…。)
ちなみに順不同。さっと目を通せる程度のことしか書かない。
また何か間違ったことを書いてたり、このコマンドの方が便利やでとかいう指摘がありましたらコメントいただけると泣いて喜びます。

git remote

リモートリポジトリの一覧を表示

$ git remote -v

リモートリポジトリにrepo_nameという名前をつけて、pullとかで使えるようにする

$ git remote add repo_name git@***url***

repo_nameで指定されるリモートリポジトリのurlを変更する

$ git remote set-url repo_name git@***other-url***

git rm

git管理下からファイルを削除する(git rmとrmの違いについては別途記事を書くことにしよう)

$ git rm file_name

git管理下からファイルを削除するが、ファイル自体は残しておく

$ git rm --cached file_name

git add

カレントディレクトリの変更(新規作成ファイル含む)をインデックスに記録する

$ git add .

ある特定のファイルの変更部分のうちステージングにあげたいものを対話的に選択する(参考:横着で神経質な私とあなたに贈るgit add -p - Qiita [キータ]

git add -p file_name

git branch

ローカルにあるブランチ一覧と今自分が選択しているブランチを確認する

$ git branch

ブランチの新規作成(選択しているブランチは切り替わらない。また既に存在しているブランチを新規作成しようとした時はエラー)

$ git branch branch_name

ブランチ名の変更

$ git branch -m <old_branch_name> new_branch_name

ブランチを削除する(HEADに変更がmergeされていれば使える。ちなみにこのコマンドを実行してもリモートのブランチは削除されないので、リモートブランチもいらなくなったならgit push --deleteしないといけない)

$ git branch -d branch_name

ブランチの強制削除

$ git branch -D branch_name

git fetch

ローカルブランチにmergeせずに、リモートの変更をローカルのgitに教えてあげる

$ git fetch remote_repo

git merge

あるブランチの変更を現在のブランチに適応する

$ git merge a_branch

リモートにあるブランチの変更を現在のブランチに適応する(実行前にfetchしておく)

$ git merge remote_repo/a_branch

あるブランチの変更を現在のブランチに適応するときに、あるブランチのコミットを一個にまとめて適応する(このオプションに助けられることが結構あるんだけど、なんでこのオプションが重要なのかをうまく説明することがまだできない)

$ git merge --squash a_branch

git pull

(正直なところ手間が増えてもfetchしてmergeした方が安全。参考: git push の反対は git pull ではない - Qiita [キータ]) リモートの変更全てをfetchした上でローカルブランチに変更をmerge(ローカルのgitは基本的にfetchとかしない限りリモートの変更を知らないので、pruneオプションとかfetchは重要)

$ git pull --prune

git push

ローカルの変更をリモートに強制push

$ git push -f repo_name branch_name

リモートブランチの削除(ver 1.7以降)

$ git push --delete repo_name branch_name

リモートにあるタグの削除(ver 1.7以降)

$ git push --delete repo_name tag_name

リモートリポジトリにタグを付与する(あらかじめローカルでタグが貼られている前提)

$ git push --tags repo_name

git checkout

ブランチを切り替える(この時指定したブランチ名がローカルにはまだ存在せずリモートには存在する場合、リモートリポジトリの変更を反映した状態でブランチ切り替えが行われる)

$ git checkout branch_name

ブランチを新規作成して切り替える(リモートリポジトリに既にあるブランチであっても、ローカルでは新しいブランチとして作成される)

$ git checkout -b branch_name

git commit

コミットメッセージを付けてコミットする

$ git commit -m 'commit message'

別エディタを開いてコミットする(どんな差分をコミットしようとしているのか確認できる点が大きい。コミットする前にここで差分の編集もできる。私も以下のツイートを見て以来、-m使わずに-v使ってる。)

$ git commit -v

git reset

インデックスされた変更を取り下げる

$ git reset

現在のローカルの変更を全部指定のコミットまで元に戻す(ただしgit管理下におかれていないファイルには何もしない)

$ git reset --hard commit_log

git rebase

コミットログを後から自分に都合のいいように変更する(って言ってるけど、実際にコミットしたものを後から操作するの、別ブランチをマージとかしてたらクソ面倒だし、そもそも初めっからコミットログをいじらなくても良いように開発しろやっていつも自分に対して思ってる。)

$ git rebase -i

git diff

インデックスとHEADの差分を見る

$ git diff

コミット同士の差分を見る(before_commitとafter_commitのところはブランチ名でも良い)

$ git diff before_commit after_commit

他にもいろいろありますが…

例えばgit aliasとかgit configとか。でもこれらって一度設定してしまうと、そんなしょっちゅう使うようなコマンドではない気がする(少なくとも私は)。コマンドとオプションももっと他に便利に使えるものがあると思うけど、本当に今よく使うものはこの位だと思う。まだ理解が追いついてないコマンドとかもあるし。

入門Git

入門Git

今年の私が参考にしたgit関連リンク

*1:このリンクでfetch大切だなって思ったんだった

*2:これなんでブクマしたか忘れた

*3:そうかcurlが利いてないとか言う問題にぶちあたったんだっけ

*4:でも結局terminalからgitたたいてるというね。いやIDE上から変更見れるのは助かるけども