Github基礎

#Github基礎操作
目的：基礎操作の習得

##前提スキル
・linux等　OSをターミナルで操作出来るレベル
・エディタの操作 Atom VScode

ターミナル
cd/cat/mkdir/touchなどは使えるレベルが前提

##Gitとは？
gitファイルのバージョンを管理する
gitはデータをスナップショットで保存する


----------------


[リモート]



リモートリポジトリ



--以下ローカル環境--
[ローカル]



ローカルリポジトリ
  スナップショットで記録する


ステージ
  コミットする変更を準備する所



ワークツリー
  自分の作業



##git 設定
```
            -
$git config --global user.name "github user name"

$git config --global user.email xxxxxxxx@gmail.com

使用するエディタｖ
$git config --global core.editor "atom --wait"

$git config user.name
github user name

$git config use.email
xxxxxxxx@gmail.com

$git config --list
登録情報一覧

$cat ~/.gitconfig
情報表示　
設定場所
```


##ローカルリポジトリの作成
  .gitディレクトリが作成（ローカルリポジトリ）
  必要なものも同時に作成される

```
$cd Documents

Documents$mkdir git_study

Documents$ls
git_study

Documents$cd git_study

Documents/git_study$git init

ローカルリポジトリの作成
Doc~$git init

作成の確認
Doc~$ls -a
. .. .git

Doc~$ls .git/
HEAD branches config description hooks info ...

object
リポジトリの本体

config
設定ファイル
```



##リモートリポジトリ作成

```
$git remote add origin URL


今後origin で使用ができるためURLを使用してなくて使用したほうが良い

$git push -u origin master

```


##リモートリポジトリの操作　変更・削除
```
変更
$git remote rename old_name new_name
確認
$git remote

削除
$git remote rm リモート名


リモートリポジトリの追加
リモートリポジトリは複数可


$git remote add リモート名
$git remote add xxxxxxx URL

複数リモートを持つことが出来る

```


##リモートリポジトリから情報を取得する方法
```
$git fetch リモート名
リモートリポジトリ　→　ローカルリポジトリ


情報習得
例：
$git fetch origin

全てブランチ情報を表示させる
$git branch -a
  remotes/origin/master

切り替え
$git checkout remotes/origin/master


取得したデータをワークツリーに反映
$git merge origin/master

```
##git pull

```
リモートリポジトリ　→　ローカルリポジトリ　→　ワークツリー


$git pull リモート名　ブランチ名
$git pull origin master 略せる
↓
$git pull


同じことをするには
$gitpull =

両方の処理をpullなら一回で行える
$git fetch origin master
+
$git merge origin master




pullより　fetch+mergeで運用するほうが無難　


現在いるブランチがmasterの場合
$git branch
*master
git_study


リモートリポジトリ
$git pull origin git_study

↓

ローカルローカル
remotes/origin/git_study

↓

ワークツリー
*master　←　masterブランチにマージされる
git_study

選択しているブランチにマージされる
```
##リモートの情報を確認する方法
```
$git remote show
$ git remote show リモート名

HEAD branchの確認など
```

##途中からプロジェクトに参加する（Gitクローンについて）

```
$git clone <リポジトリ名>

リモートリポジトリ

↓$git clone ファイルと.git両方がコピーされる

ローカル

github コピーしたいリポジトリへ移動

code>https

https://github.com/ユーザー名/リポジトリ名.git

URLのコピーをする<リポジトリ名>にこれを使用する

$git clone https://github~....

```















##基礎操作

###git add
```
ワークツリー　→　ステージ

$git add ファイル名
$git add ディレクトリ名
$git add .

```
###git commit
```
ステージ　→　ローカルリポジトリ

$git commit
$git commit -m "メッセージ"　簡潔に書くこと
$git commit -v コミットの内容変更
```

###リモートリポジトリへ送信
```
ローカルリポジトリ　→　リモートリポジトリへ

$git push リモート名 ブランチ名

master デフォルトのブランチ名
$git push origin master



初回 -u を使用すると
$git push -u origin master
次回 origin master をpush する場合
$git push のみで可能になる

```

##git log

```
変更履歴の確認
$git log
$git log --oneline
$git log -n コミット数
```



##git status
```

変更状況の確認をする方法
ワークツリー　→　ステージ
            変更確認

ステージ　→　ローカルリポジトリ
        変更確認


```

##git mv
```

ファイルの移動を記録ファイル名変更
$git mv oldファイル newファイル

```

##gid diff
```
変更内容の確認

ワークツリー　→　ステージ
$git diff

ステージ　→　ローカルリポジトリ
$git diff --staged

$git diff ファイル名
```


##git rm
```
ファイルの削除

$git rm
ローカルリポジトリ
ワークツリー
両方から削除される


$git rm --chached
ローカルリポジトリから削除


$git rm ファイル名
$git rm ディレクトリ名

例：
$git rm xxxxx.html

$git status
  Changes to be committed:

    deleted:   xxxxx.html


もし戻す場合
$git reset HEAD xxxxx.html

  reset:    xxxxx.html

$git checkout xxxxx.html
```

##gitにエイリアスを使用する
```
エイリアスを使用することで略して書くことが出来る

gitのコマンド入力を楽にすることが出来る

--global全体
--globalをつけない場合現在のリポジトリ内で使用出来る
推奨は--globalを使用すること

$git config --global alias.ci commit
$git config --global alias.st status
$git config --global alias.br branch
$git config --global alias.co checkout

```

##機密情報などを管理から外す方法

.gitignoreに記述する




index.html


/root

dir/

/*/*.css



##ファイルへの変更を取り消す方法
```
ステージ　→　ワークツリー
ステージのじょうたいと同じにする


$git checkout --ファイル名

$git checkout --ディレクトリ名


変更を取り消す
$git checkout -- .
```


##ステージに追加した変更を取り消したい時
```
ローカルリポジトリ　→　ステージ　
内容を上書きすることで変更を取り消す事が出来る

HEAD
今いる最新のコミットの事

$git reset HEAD ファイル名
$git reset HEAD ディレクトリ名

全消し
$git reset HEAD .
ステージから変更を取り消す為
ワークツリーには影響を与えない

```





##直前のコミットをやり直す

リモートリポジトリにプッシュしたコミット対しては使用しないこと

```
$git commit --amend


リモートリポジトリの確認

$git remote
origin

詳細確認
$git remote -v
fetch
push　

```