GIT初心者のGIT入門 とおまけ

やったことを自分なりにメモしたりまとめたりしてみたものをのせます
走りメモのようなところもあるので、わかりづらい箇所あらばご容赦下さい。

# 事前準備
VS CODE入れる


# 考え方
リモート　Github	 (リポジトリサーバー)	←こっちが本体
　↓まるまる持ってくる
ローカル　Git （自分のPC上） ←開発は基本こっちでやる

（リモートで作業するパターンと、ローカルでやるパターン、どっちもできはする）

リモートはWebサイト（ブラウザ上）でやる制約がある

# git 使うコマンド
`git clone`
1回目のリモート⇒ローカルに丸々もってくることを　Clone　と言う
（一番最初しか使わない　・リポジトリから落とす）

`git pull`
予めCloneしているものを落とすこと。

`git push`
ソースコードあげといて、プッシュ。

# ブランチの考え方（コミット、プッシュ、マージ）
開発は複数人でやることになる		
そのままやると競合とかでグチャグチャにならないの？		
↓
回避策で　ブランチ　（branch)　がある
		
例えば作業者 Aさん、作業者Bさんがいる時での流れでの例

---
```mermaid
graph TD;
    Main-->Aさん作業;
    Main-->Bさん作業;
    Aさん作業-->マージ後;
    Bさん作業-->マージ後;
```

【main】 Main(ベースリポジトリ）　←大元のソースコード　これを丸々コピー

２，
・Aさん作業（ブランチ）←Aさんはこれをいじる　a.txt作成 （1機能単位とかで触るイメージ）
・Bさん作業（ブランチ）←Bさんはこれをいじる　b.txt作成
		
３，
Aさんが　a.txtをマージ（統合）した後に		
Bさんが　a.txt  b.txt をいじった場合		
　↑Aのファイルはコピーしてきたときと違う為マージできませんと出ます		
		
Bさんは「もう一回　mainブランチを元に最新化してください」と言われます		
		
４，
`git add .`( or `git add ファイル名`) でローカルを完了させて
`git pull` で最新化させる		
　→Aさんの変更が取り入れます		
　　　→いい感じにしてくれる		

うまくいけば(※)[マージ後]にまとまり、二人の作業が一緒になる。

:::note warn
※上手くいくとき、上手くいかないとき　がある		
		
上手くいかないとき：コンフリクト（競合）		
→こうなったら、手動で直すしかない		
		
1個づつソースコードの行単位で　どっちが正しいか、YES・NOでどっちを正しいチェックできる		
		
競合直しました→　差分認識できたので、main統合して大丈夫ですよってなる
		
コンフリクト画面
|Aさん変更|手動で直したやつ|Ｂさんが直したやつ|
↑でどっちが正しいかポチポチして進めることができる

最終的に真ん中が本物になる
:::

:::note info
プルリクエストでメインに統合させる必要がある		
これをすることで競合が起きないようにしている
:::

# コミット
変更した単位　ユーザーでアップしたもの
Github　でやってくれる

上手くいくとき　とはどんな時？

プログラムはブロック単位で定義されている

最上部 
・近いところ　←　同じブロックならエラー出る
・同じところ　← ２００％コンフリクトなる


いいなと思った参考
・git を初めて使う時 コミット→プッシュ→マージ　の流れ
　https://qiita.com/yukiyoshimura/items/7aa4a8f8db493ab97c2b

# GIT Command
ローカルでやる時、↓のどっちかでできる。
① コマンドを打つ (ターミナル、cmd など
② Soucetreeなどツールを使って（ＧＵＩ上でやる）
	
## 基本使うコマンド
```
git clone

git commit
git add
git pull
git push

git swich
git branch
git checkcout
 ```
### git clone	
ローカルフォルダに持ってくるコマンド。

#### 【使い方】

	git clone ${リポジトリーのパス}

### git pull	
	
【リモートで1個ファイルを引っ張ってくる。】

他の人が追加したファイルを入れることができる。
（自分がいるブランチに持ってきてくれる）

	git pull origin main   ←オリジンはリモートの事。
	
### git push	
ローカルで編集したものをリモートにアップする方法

	git push

:::note warn
※ただし、他の人がアップしたものと同じところをいじってる場合
コンフリクトエラー（競合エラー）になる
	
リモートにあるのが正義
ローカルは2番目に優先されるものとする
同じファイルで差分が出た場合は、リモートを正となる
	
なので、先にgit pull で持ってこないといけない
	
コンフリクト時は「マージエディター」をすることで調整ができる
:::
	
### git commit	
ローカルで編集すると「ファイル変更されてますよ」って出る（VS CODEなら[U]？だかの表示が出る）
それをリモートに上げるかどうかはこっちで指定する必要がある

確定できるよーっていうのを言うこと
	
    git commit -m "ローカルで編集したよ"　

↑こんな感じにすればメモも追加できる

これで変更確定
ただこれだけだと、この場合エラーになる
	
変更確定をｇｉｔに教える必要がある
そういうとき！↓
### git add	

	git add . ←全部確定
	git add test5.txt  ←このファイルだけ確定となる
	
その後、 

	commit -m "ローカル編集したよ"
	

ここまではローカルで変更反映しているだけ
この後pushする必要ある

	git push

で、リモートリポジトリーへアップできる。
	
	git branch	//枝分かれで、リモートのものを落とせる
	git branch -r //←リモート上のものをまとめておとせる
	git branch hoge //←hogeってフォルダができる
	//↑ main のものをhogeに枝分かれしたもの
	
	hogeで作業したいそんな時！
	
### git switch
	git switch hoge

でhogeブランチに移動できる　（ローカルの話）
ただ、この状態は
	
	git branch -r 
 
 で見ると　、リモート側にはｈｏｇｅが無い
現在自分のいるブランチのみを見ている
ブランチはgit pullをしても、新しいのをもってきているわけでない
	
じゃあその時、リモートのブランチを使いたい時
	
### git checkout

	git checkout　remote-branch  //リモートから持ってきて、かつ移動できる（今から作業するようになる）
	
	git fetch	//←全部持ってきてくれる　はず

 # ブランチがしたい時
(事前にClone済みでの話)

VS CODE上でCloneしたディレクトリ内で　sera.txt　を追加し、このファイル右に「U」が出てる状態から

	git branch -r	//←リモートのブランチが見れる		
						
	git branch test-sera			
	//今いるブランチから、ブランチを作る （mainから作るのが普通）		
	//仕事でやるなら、mainから派生することが多い		
			
	git switch			
			
	git add .	//←ファイル全部		
	git add sera.txt	//UがAになる

	git commit -m "せら はじめての コミット" // コメントをつけてコミット

	git pull　origin　ブランチ名 //ここでファイルをリモートリポジトリーにアップする

ブラウザでGit.hub開いて
いじっているリポジトリーに移動
プルリクエストを確認

プルリクエストの画面で
「pull Request」　⇒　「Confiorm　～」とか出るとOK

うまくいっていれば、ブラウザ上で
「sera.txt」がアップされているはず！

これでブランチ→編集→comit→pullが完了となる。