---
# System prepended metadata

title: gitのあれこれ

---

githubにある共有フォルダを自分のローカルにcloneする方法

・githubのリモートリポジトリをコピー
・cd デスクトップ　コマンド入力
・git clone リモートリポジトリのurl

デスクトップにフォルダが作成される

git add .
git commit -m ''
git push

新しく更新されたファイルをインストール
git pull所得しますよ
originでフォルダを選択
git pull origin main 

## ブランチを切って作業する流れ

### 基本的に使うコマンド
**git checkout -b ブランチ名**
↑新たに-bでブランチを作って新しいブランチに移動するコマンド

**git checkout ブランチ名**　
↑ブランチ移動

**git branch -d ブランチ名**　
↑branchを消す方法

**git branch**
↑branchを見る

**git pull origin main**
↑mainではないローカルのブランチにいて、リモートのmain branchの内容を取り込みたい時

**git pull**
↑mainのローカルbranchにいる状態でリモートのmain branchの内容を取り込みたい時

新しいブランチをpushする時はgit push の後に以下の内容をコピーする
 [git push --set-upstream origin 新しいブランチ名]
### 一つのブランチで本番反映するまでの流れ

```
①mainブランチにいる状態で新しいtestというブランチを作る
git checkout test

②testブランチで作業が終わったら
git add .
git commit -m '更新'
git push

③先駆サイトの場合、田中さんから本番反映を依頼されたらnpm run generateしたファイルを本番サーバーにアップ
git generate

④GitHubでローカルリポジトリのtestプランチ→リモートリポジトリのmainブランチにプルリクエストを送る
プルリクエストを承認してローカルリポジトリのtestプランチの変更内容をリモートリポジトリのmainブランチにマージする

⑤mainブランチに本番反映した内容を取り込む
git checkout main
git pull

⑥本番反映が終わったtestブランチを削除する
git branch -d test

⑦ ブランチを確認
git branch
```

### 作業中のブランチで新たにブランチを追加する時

```
①新しいブランチを追加する前にmainブランチに戻る
git checkout main

①mainブランチで新しいtest2というブランチを作る
git checkout test2

⑦ ブランチを確認
git branch
mainブランチに戻って新しいブランチを追加することで、作業途中のtestブランチの内容を引き継がずに作業をすることができる
```

## 追記　
it log --oneline   
何かを記録すること、あるいは、記録した物それ自体を見やすくするもの

git reset --hard a97e062(ハッシュ値)
特定のコミットまで戻したい時

git push -f


## featureブランチを使う時
開発サイトと本番サイトがある場合、mainブランチを持ってきて、featureブランチを作って作業を行う。
作業が終わった場合、編集内容を開発サイトにアップロードしてdevelopブランチにmargeする。お客様からokもらったら、本番サイトにアップロード、その後にmainブランチにmargeする。
### mainにmargeする場合、必ず作業しているブランチからmainにmargeする。developブランチからはmainにmargeしてはいけない。

git checkout -b feature/機能名 or タスク番号

# 今まで起きたエラー
## non-fast-forward エラー
リモートリポジトリにある変更がローカルの変更よりも新しいため、直接プッシュできないことを示している。
### 解決法
```
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
```
1. hintで出てきた`git config pull.rebase false  # merge`を使って解決する。
（リモートの変更をローカルの変更にリベース（履歴を書き換え）する形で統合する。ローカルのコミットがリモートのコミットよりも上に積み上げられ、優先される。）
1. その後にgit pullでリモートリポジトリの変更をローカルのブランチにマージする。
2. コンフリクトが起きてしまったら、Vimでコンフリクトを解決。どちらか正しい方を選択し、:wqで変更を保存して終了。
3. コンフリクトを解消した場合、git add〜　いつもの流れでgitにファイルが解決済みであることを伝える。

追記：gitにはデフォルトでvimが埋め込まれている。
コンフリクトの解決など、テキストを編集する必要がある場面でVimが呼び出される。