git githubをwslで使う 初心者用


gitを使ったことがない初心者がgit環境を整えて,コミット,プッシュ,マージ,コンフリクト解決ができるようになるまでを,具体的なコマンドを実行しながら練習するための覚え書き.

gitの準備

github desktopを使えばatomなどで編集し,guiでコミットやプッシュができるが,コマンドで使用する方法としてWSLのUbuntuでやる方法

WSLでgit連携

shell
 $ sudo apt get install git
 $ git config --global user.name  USERNAME
 $ git config --global user.email [email protected]

公開鍵をgithubに登録する

 $ssh-keygen -t rsa -C "[email protected]"
 $cat ~/.ssh/id_rsa.pub

パスフレーズを任意で入力する.githubのパスワードとは違うもので,空欄でも問題ない. 以下の順に操作

  • github.comでマイページに行く
  • setting を選択する
  • SSH and GPG key を選択する
  • New SSH key を選択する
  • コピペで公開鍵を張り付けて保存.
  • 上記のパスフレーズを入力.

で確認してみる.
あとは普通にリポジトリクローンしたりプッシュしたりできる.

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 [email protected]:Tarou/test.git

上このディレクトリ(リポジトリ)をリモート(URL先)に関連づけるコマンド.
任意のURLを張り付ければよい.このときプライベート設定ならパスフレーズを要求される.

もしくは単に

$git clone [email protected]:Tarou/test.git

とすれば/hoge/test/.git`ができる.これだとリポジトリ名のディレクトリが作られる_.すでにPCに開発したプログラムがあって,リモートへ送りたいだけならcloneしないほうがよいかも.

$git remote -v
 prigin [email protected]:Tarou/test.git (fetch)
 prigin [email protected]:Tarou/test.git (push)

と出れば成功.
リモート先のファイルをダウンロードするorローカルのファイルをリモートへ送るには,

download
$git pull origine 
sending
$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側ですでにマージが終わっているものを受け入れてもらっているだけ.)