gitを使ったことがない初心者がgit環境を整えて,コミット,プッシュ,マージ,コンフリクト解決ができるようになるまでを,具体的なコマンドを実行しながら練習するための覚え書き.
#gitの準備
github desktopを使えばatomなどで編集し,guiでコミットやプッシュができるが,コマンドで使用する方法としてWSLのUbuntuでやる方法
##WSLでgit連携
$ sudo apt get install git
$ git config --global user.name USERNAME
$ git config --global user.email hogehoge@gmail.com
##公開鍵をgithubに登録する
$ssh-keygen -t rsa -C "hogehoge@gmail.com"
$cat ~/.ssh/id_rsa.pub
パスフレーズを任意で入力する.githubのパスワードとは違うもので,空欄でも問題ない. 以下の順に操作
- github.comでマイページに行く
- setting を選択する
- SSH and GPG key を選択する
- New SSH key を選択する
- コピペで公開鍵を張り付けて保存.
- 上記のパスフレーズを入力.
$ ssh -T git@github.com
で確認してみる.
あとは普通にリポジトリクローンしたりプッシュしたりできる.
#gitを始める
$mkdir hoge
$cd hoge
$git init
これでこのディレクトリに.gitができる.
/hoge/.git/
この.gitが存在している場所/hoge/下がgitの管理下である.
なぜinitが必要?
たんにgit cloneするだけでは,コードをダウンロードしただけに過ぎない.
initコマンドでそのディレクトはgitのローカルのリポジトリ機能がつかえる.
さらにリモートと連携することで,push,pullなどを用いてサーバ上へ変更を反映することができる.
いちいちリモートを切り替えないといけない?
(git管理下になっているディレクトリはストレージ内にいくつか存在でき,それぞれのgitディレクトリはそれぞれのリモートと関連付けらている.ディレクトリに移動するだけでリモートは切り替わる.)
このままではリモートのリポジトリと連携ていないので,Tarouさんのtestというリポジトリと連携してみると,
$git remote add origin git@github.com:Tarou/test.git
上このディレクトリ(リポジトリ)をリモート(URL先)に関連づけるコマンド.
任意のURLを張り付ければよい.このときプライベート設定ならパスフレーズを要求される.
もしくは単に
$git clone git@github.com:Tarou/test.git
とすれば```/hoge/test/.git````ができる.これだと__リポジトリ名のディレクトリが作られる___.すでにPCに開発したプログラムがあって,リモートへ送りたいだけならcloneしないほうがよいかも.
$git remote -v
prigin git@github.com:Tarou/test.git (fetch)
prigin git@github.com:Tarou/test.git (push)
と出れば成功.
リモート先のファイルをダウンロードするorローカルのファイルをリモートへ送るには,
$git pull origine
$git add -A
$git status
$git commit -m "first commit"
$git log
$git diff Head
$git push origin master
#gitで使うコマンドの説明
$git clone
新規でリモートからリポジトリをコピー
$git pull origine
リモートからリポジトリをコピーしてくる
$git status
編集中なら赤字,ステージング中なら緑字
$git commit -m "coment"
リモートへコミットする
$git add .
ステージングする
$git log
コミットの歴史
--Graph ツリー表示
--oneline 1コミット1行
$git push origin
ローカルへプッシュする
$git pull
リモートからダウンロードしてマージもする
pull=fetch+mergeということ
$git fetch
リモートからダウンロード
名もなきブランチ扱い:FETCH_HEADでチャックアウトできる
$git branch -d develop
ブランチdevellopを削除する
#ブランチ
developというブランチ名でブランチしてみる.
$git chekout -b develop
ブランチを切るgit branch develop
とそのブランチに入るgit checkout develop
を一気に行うオプションである.
git branch
でブランチを一覧できる.
ブランチの中で作業してリモートのブランチにプッシュする.
$git add -A
$git commit -m "dev"
ローカルで何度かコミットなどして,ある程度できたらリモートへプッシュする.
$git push origine develop
そうして初めてリモート上でブランチの存在が認知される.
これをマスターへ融合させる.この間にマスターは特に変更されてないなら自動でマージできる.
$git checkout master
$git merge develop
ほかにもブランチがあったとしても先にマージされたブランチが方が正統派となる.
ここでエラーがでるなら,ファイルを開いて編集する.
この編集作業自体がマージにほかならない.作業内容を記録するためにコミットしておく.
$git add -A
$git commit -m "develop merge ok!"
ただし,コンフリクトが起きることがわかっているなら,あらかじめdevelop側で現在のmasterをマージしておいてから,master側でマージをするほうが礼儀正しいはずである(土足で入るようなもの).
気になる場合はリベースでやり直してみる.
$ git reset --hard HEAD~
$ git checkout develop
$ git rebase master
そしてコンフリクトを手動で直す作業...
$ git add A
$ git rebase --continue
この時点で一応commit,pushを残しておいてもいいかも.
このリベースは単にまだmasterにマージするつもりはなくても,masterの最新情報をdevelopに与えておくのに使うときれいに開発できるはず.
$git rebase --abort
でリベースを取り消し.
$ git checkout master
$ git merge develop
これで自動的にマージされる.(というかdevelop側ですでにマージが終わっているものを受け入れてもらっているだけ.)