【メモ】GitHubでgit clone〜git pushまで

### **GitHub**
git clone〜git pushまでのメモ。
(その他git関連のコマンドも追記)


# ローカルにcloneする (git clone)

URLは、GitHubのcloneしたいリポジトリページの右上の緑色のボタン(Clone or download)のUse HTTPSをクリックすれば表示されるので、それをコピーする。


```
git clone <<URL>>
```

**<実行結果例>**

```
Cloning into 'リポジトリ名'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 7 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), done.
Checking connectivity... done.
```

# ローカルで変更したものをcommit (git clone)

1. ローカルで変更を加える

2. 変更をadd

```
git add .
```

※. 以下のように、全体ではなく、ファイル指定やワイルドカードを用いた拡張子指定などもできる

```
git add *.py
```


3.変更をcommit

```
git commit -m "try commit"
```

**<実行結果例>**

```
[master 0731f24] try commit
 1 file changed, 2 insertions(+), 1 deletion(-)
```

# リモートに変更を反映 (git push) 

```
git push
```

**<実行結果例>**

```
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 327 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To <<URL>>
   c836616..0731f24  master -> master
```

***

## **追記**
### **cloneではなくローカルからリモートまでリポジトリ構築する場合**

1. GitHubでリモートリポジトリ作成 (Newボタンなどから)

2. ローカルリポジトリ作成〜リモートに反映

```
git init
```
```
git add .
```
```
git commit -m "first commit"
```
```
git remote add origin <<URL>>
```
```
git push -u origin master
```


### **リモートの変更をローカルに反映(git pull)**

```
git pull
```

ブランチ名を指定して持ってきて新規ブランチ作成する場合はこちら(-bをつけてブランチ切り替えまで)

```
git fetch
git checkout -b ローカルブランチ名 リモート名/ブランチ名
```

<br>
***


##**【参考1】 補足コマンド**
### **ブランチ関連**

- ブランチ切り替え

```
git checkout ブランチ名
```


- ブランチ作成+切り替えを一括

```
git checkout -b ブランチ名
```

- ブランチ削除

```
git branch -d ブランチ名
```

- リモートブランチの更新反映 〜 リモートブランチ確認

```
git fetch

git branch -a
```




### **マージ**
1.マージ先ブランチに切り替え

```
git checkout マージ先ブランチ名
```
2.マージ元ブランチをマージ先ブランチに統合

```
git merge マージ元ブランチ名
```

### **stash**

- 現在の作業をコミットせずに一旦スタックに退避

```
git stash
```

- 現在の作業をコミットせずに一旦スタックに退避(未追跡の新規追加したファイルなどを含む)

```
git stash -u
```

- 退避したスタックリストをみる

```
git stash list
```


- 退避したものを戻す

```
git stash pop
```


### **push**

- ローカルブランチからリモートブランチへpush(localのブランチ名からremoteのブランチ名へpush)

```
git push origin ブランチ名
```


- pullリク取り消し

```
git push --delete origin ブランチ名
```


### **remote**

- リモートリポジトリを確認

```
git remote -v
```

- リモートリポジトリを削除

```
git remote rm リモートリポジトリ名
```

- fork元(upstreamは例)をremote登録~fetch, remoteブランチ含む確認, ローカルにbranch作成まで

```
git　remote　add　upstream <<URL>>
git fetch upstream
git branch -a
git checkout -b upstream_master upstream/master
```

- ローカルブランチと追跡ブランチの対応リストを表示

```
> git branch -vv
* main  xxxxxxx [origin/main] ~~~
  dev xxxxxxx [origin/dev: ahead 1, behind 2] ~~~
```


### **状態確認**
- ステージングの状態を確認

```
git status
```

- 変更ファイルの差分を確認

```
git diff
```

- 最新のコミットログを確認 (以下例は 10 件表示の場合)

```
git log -10
```

### **設定確認**

- gitのconfig設定を確認 (global / local)

```
git config --global -l
```

```
git config --local -l
```


##**【参考2】 2段階認証の設定後に認証失敗する**
2段階認証の設定後に認証情報があっていても、以下のエラーメッセージが出るようになりました。

```
remote: Invalid username or password.
```

これは以下の情報の通り、 Developer settings の Personal access tokens から取得したアクセストークンをパスワードに設定すれば認証が通るようになるはずです。

[Creating a personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)