【Xcode】XcodeでGit,GitHubの操作や連携で困ったら見る

# はじめに
XcodeでのGitHub連携（commitだったりPushだったり）で、困ったときに見るメモ

# Git & GitHubとは
Gitでローカルリポジトリを管理
Git Hubでリモートリポジトリを管理

# Git で使うコマンド
- Gitで管理したいディレクトリに移動する。
```
  cd ~
```

- ディレクトリ上にGitリポジトリを作成。（プロジェクト作るときに連携出来ているなら不要）
  ls -a でfinder上では見えなくても、ターミナル上ではgitリポジトリが作成されていることが分かる。
```
  git init
``` 
    
- ステージングエリアにあるファイルを確認できる。   
  （Gitレポジトリにコミットするファイルを置いておくためのエリア）
```
  git status
```
    
- ステージングエリアに~を追加。（コミットできるようになる）    
  （git add . でこのカレントディレクトリ内の全てを指定すればまとめてステージングエリアに追加できる。）
```
  git add ~ 
```
    
- ステージングエリアにあるファイルをコミット（追加、変更をGitに登録）できる。  
```
  git commit 
  git commit -m " コメント" で、どう変更したかわかるようにするとよい。
```
    
- 誰がいつ、どのようなコミットをしたかを確認できる。（ハッシュもある。）
```
  git log 
```

- ファイル名 git にコミットされているファイルと現在のコミット前のファイルとの比較を確認できる。
```
  git diff 
```

- コミットを戻せる。どこまで戻すか、直前のコミットの場合はHEAD^を使用。
```
  git reset --soft 
```

- 特定のコミットを取り消す
```
  git revert <commit>
```

- git revert で初期commitを消してしまった場合
    まずは過去のコミット一覧を見る 
```  
    git reflog
```

そこからコミットを選択して復元する

```
    git reset --hard <コミット>
    例）git reset --hard HEAD@{2}
```

メモ
- git 内のファイルが更新されている状態でまだコミットしていない場合、  
  git status コマンドでまだコミットされていない、またはステージングエリアに追加されていないことを確認できる。
    
- git diff ファイル名 で、git にコミットされているファイルと現在のコミット前のファイルとの比較を確認できる。
    ー がコミット済、
    ＋ が現在のコミット前

# GitHub操作

- GitHub ホーム画面で右上の＋矢印をクリックし、New repository を選択
    
    Repository name と Description を入力
    
    リポジトリを公開するか選択。（基本は公開でよい）
    
    Create で作成
    
- ローカルの git リポジトリにインターネット上のどこかのリモートリポジトリを作成
```  
    git remote add origin URL (origin はリモートの名前で理論上は何でもよい。)
```
    
- ローカルリポジトリをリモートリポジトリにプッシュ(リモートとローカルリポジトリをリンク)
    Git Hub のアカウント名、Git Hub のトークンが必要。
```    
    git push -u origin main   
```
    
- InsightsのNetworkでリポジトリの進行状況を確認できる。

- 現在のディレクトリ内の全てをステージングエリアから削除する。(r 再帰的に)
```
  git rm --cached -r .
```

- [https://github.com/github/gitignore](https://github.com/github/gitignore)
    
    GitHubチームが所有するリポジトリで、特定の言語でGitHubやその他のリモートリポジトリにアップロードしたくないようなファイルのテンプレートがあらかじめ組み込まれている。
全て事前に作成されているので、全てコピーし、.gitignoreファイルに入れるだけでいい。

# GitHub にある他の人が作ったアプリをクローン

  GitHub 上にある他のプロジェクトをクローンできる

```
  git clone URL
```

clone で追加したものは Simulator 上で動作するが、実機でも操作したい場合以下を変更する
- バンドル識別子
- Teamの追加


# Git でCLI操作からリモートリポジトリにプッシュ

ブランチ...1つのプロジェクトから分岐させることにより、プロジェクト本体に影響を与えずに開発を行える機能。

新しいブランチを作る。
```
git branch 新しいブランチ名
```

今あるブランチを確認する。
```
git branch
```

  -が現在いるブランチ

ブランチを切り替えれる
```
git checkout ブランチ名 
```

ブランチをマージする。
```
git merge ブランチ名
```

リモートリポジトリにプッシュ
```
git remote add [追加するリモートリポジトリ名] [追加したいリポジトリ]

例：
git remote add origin http://xxxxxx.xxx/xxxx
```

分岐ブランチに行った変更をmainブランチに統合
```
git push -u origin main
```

リモートリポジトリを一覧表示
```
git remote -v
```


# Git Hub でバージョンをコントロール

ローカルリポジトリでのCLI操作でのcommitは、Git Hub操作だけでも完結できる。
- Git Hub で New repository を開く
- repository 名を入れ、Add a README file にチェックを入れて作成。
- repositoryができたら、Add file の Cleate new file でファイルを作成。
- ファイル名、内容を記載したら下の Commit new file で main ブランチに直接コミットする。
- Switch branches/tags で新しいブランチに名前を付ける。
- Switch branches/tagsから直接ブランチを移動できる。
- ファイル名を選択し、鉛筆マークからファイルを編集できる。
- 編集後、Commit changes でファイルを更新できる。必ずcommit先を確認する。

Compare & pull request から2つのブランチをマージするプルリクストを作成する。

プルリクエストとは、自分の変更したコードをリポジトリに取り込んでもらえるよう依頼する機能のこと。

マージ…複数のものを1つにする。分岐したブランチを統合。


# Xcodeでバージョンをコントロール
Create Git repository on my Mac にチェックを入れてプロジェクトを作成
左側タブのソースコントロールナビゲーターでcommitの場所を見ることができる。
最初のcommitが表示される。

最新の変更をcommit
- 上にあるタブのソースコントロールからcommitを押すか、optionコマンドを使用すればいい。
- 前回から変更されているところを比較できる。
- 下の空白にcommitメッセージを入力できる。
- commit ~ Filesでcommit できる。
- masterブランチにcommitが追加されている。

上にあるタブのソースコントロールから Discard All Changes をすれば最後のcommitから全ての変更を破棄できる。

ブランチの追加
- 作りたいタイミングのブランチを main ブランチのcommit で右クリックし、Branch from を選択するだけで、新しいブランチを作成できる。

ブランチの切り替え
- 左側タブのソースコントロールナビゲーターで、切り替えたいブランチを右クリック。
- Switch...(Checkout) でブランチを切り替えれる。

過去の変更を見たい場合
- 見たい過去のcommitを右クリックし、Switch...(Checkout)を選択。
以前のcommitをチェックアウトする際に、その違いを比較するために使用する。


# Xcodeで作成したプロジェクトを Git Hub のリモートにプッシュする方法
- XcodeのSettingsを開く
- Accountsに移動し、Git Hub のアカウントを選択
- Settingsから戻り、左側タブのソースコントロールナビゲーターで、mainにSwitch
- メインリポジトリを右クリックし、New "プロジェクト名" remote... を選択
- リポジトリ名と説明を入力。RemoteNameはoriginのままを推奨
- create
- リモートフォルダの中にoriginが作成される
- originにはmainブランチがプッシュされている


# XcodeでGit Hubにプッシュ後、コードに変更を加える場合
- commit時に左下のPush to remote にチェックを入れ、どのリモートリポジトリにするか選択する
- Pushせずにcommitする場合は、SourceControlタブのPushを使用する

Add a README でリモートリポジトリにローカルリポジトリにはないファイル(README)を追加できる。


# ローカルリポジトリに変更を反映させるたり、リモートリポジトリと最新の状態を合わせるためには、Pullを使用する。
- まずは、ローカルリポジトリの変更分をローカル内でcommitしておく。
- その後に、sourceControllタブでPullを使用する。
- リモートリポジトリ上で変更を加えた点が反映される。