5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

git githubをwslで使う 初心者用

Last updated at Posted at 2021-01-09

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 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ローカルのファイルをリモートへ送るには,

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

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?