##内容
- gitコマンドのメモ
チート表とかもあるけど、とりあえず自分で使ってみたものをメモ
##前提知識
よく出てくる「origin master」と「origin/master」何が違うのかよく分からないので調べてみた。
まずこの2つをわかりやすくするには、「origin」、「master」、「origin/master」の3つに分ける。
- origin
これは要するにリモートブランチそのもののこと。
当然その中にはブランチがあるはずである。 - master
という事でこれがブランチを表している。
であるので、「origin master」とは、リモートブランチの(origin)masterブランチを指しているわけである。 - origin/master
上記2つはリモートブランチだったが、こちらはローカルブランチ。
リモートのmasterブランチを追跡する追跡ブランチである。
これらそれぞれが何してるか分かっとくとコマンド打つときある程度迷わなくなる?(逆に曖昧で現場で迷った経験あり笑)
##リモートの変更を持ってくる
-
git pull < origin [ブランチ名] >
<>に記載しているブランチの変更をひっぱってくる。
実際は引数なしでチェックアウトしているブランチの変更を引っ張ってくることが多い?
git pull
# あえて引数を指定するなら
git pull origin master
git pullは実際は、「git fetch」と「git merge」のコマンドをまとめて行っているコマンドである。
-
git fetch < origin [ブランチ名]>
リモートブランチ内の引数に設定したブランチ(引数がなければ現在チェックアウトしているブランチ)を
ローカルブランチの追跡ブランチに落とす。この時の追跡ブランチが「origin/[ブランチ名]」。
-
git merge < origin [ブランチ名] >
fetchで落とした「origin/[ブランチ名]」をローカルに落とす。
# masterブランチの変更を落としたい場合
git pull
# もしくは丁寧に
git fetch
git merge origin master
初心者のうちは、fetchしてからmergeした方が何しているか理解する上でもいいのかなぁ。
##ブランチ作成
基本的にmasterを変更してpushってことはないかと思われる。。。
という事でその変更ごとにブランチを切って、レビューしてからマージするはず。
となのでまずはブランチの切り方。
- git branch < ブランチ名 >
引数で与えたブランチ名でブランチを新しく作成。
# testというブランチを新しく作成
git branch test
- git checkout < ブランチ名 >
上で作成したブランチ名を入れればそのブランチに移動できる。
元々ブランチが作成されているのであればこれでブランチの変更が可能。
git pull後にチェックアウトした場合もう一度git pullする。(チェックアウトしたブランチが変更されている可能性があるため)
#上で作成したtestブランチに移動
git branch test
- git checkout -b < ブランチ名 >
めんどくさいから新しいブランチ作ってそのままチェックアウトしちゃう便利なやつ
#testtestブランチを作成
git checkout -b testtest
##リモートに変更をあげる
無事にブランチも切れた事でファイルを編集後リモートに反映する。
今回は、testブランチで新しくtest.txtとindex.txtというファイルを作成する。
touch test.txt
touch index.txt
この作ったファイルをリモートに反映していく。
以前書いているので詳しいことは省略。
(今回はstatusなどの状態の確認は省略している)
ただし、pushの仕方のみ注意!
# リモートに反映したいファイルの登録
git add test.txt index.txt
# 変更記録を保存
git commit -m "create newfile"
# リモートに送る
git push -u origin test
初回pushのみオプションとして「-u」をつけること。
これをすることでpushしたローカルのブランチが上流ブランチとして登録される。(2回目以降はオプションなしで問題ない)
※上流ブランチと追跡ブランチの違いがよく分からん
-------- ローカル -------- ---- リモート ----
< master > -> < origin/master > | < master >
== 上流ブランチ => == 上流ブランチ =>
ローカルのの上流ブランチは、< origin/master >である。このブランチはローカルのを上流ブランチとした追跡ブランチである。
って認識?
新しくブランチ切った場合は、fetchするまで追跡ブランチはない?
これは時間あるときに調べましょう。
##その他コマンド
-
git status
現在の変更状況が確認できる。 -
git diff
変更したファイルの変更点の確認ができる - git stash
-
git stash save "massage"
修正途中で他の作業がしたい!でもコミットはしたくない!ってときに一時退避できる。
save "message"でメッセージを残せる。 -
git stash list
stashで退避した作業の一覧が見れる。
git stash list
# こんな感じで表示される
stash@{0}: WIP on test: xxxx
stash@{1}: WIP on sample: xxxx
- git stash apply
-
git stash pop
退避した作業を戻す。
stashは戻したリストを残す。
# listで表示したもののどれに戻したいかを最後の引数で指定
git stash apply stash@{0}
# 最新なら引数なしでOK
git stash apply
# listを表示しても削除はされていない
git stash list
stash@{0}: WIP on test: xxxx
stash@{1}: WIP on sample: xxxx
popは削除。
# listで表示したもののどれに戻したいかを最後の引数で指定
git stash pop stash@{0}
# 最新なら引数なしでOK
git stash pop
# listを表示すると適用したものが削除されている
git stash list
stash@{0}: WIP on sample: xxxx
git stash >> stash.txt
でテキストに出してapplyできた気がするけどちょっと調べよう。
submodule関連
- git submodule foreach "[コマンド]"
gitのサブモジュールに対して、まとめて指示できる。
特にサブモジュールを紐付けた際に、ブランチがその時の最新ブランチになるので
masterに変更する時など。
git submodule foreach "git checkout master"
ブランチ名の変更
git branch -m <古いブランチ名> <新しいブランチ名>
// 現在のブランチの場合
git branch -m <新しいブランチ名>
ブランチの削除
git branch -D <ブランチ名>