Git備忘録（windows）

# この記事のモチベーション
gitの個人的備忘録。随時更新中。

# 前提条件と注意事項
- Windowsでの操作を対象とします。
- この記事は、Gitの全体像と操作の流れをなんとなく把握した人が、とりあえず自分だけでGitを試してみようときに見るとひょっとしたら役に立つかもしれない、という内容になっています。用語の解説はしません。チーム開発ではメンバに迷惑をかけないためにもう少し深い知識が必要になるかと思いますので、そういう方は他の記事で補足したほうがよろしいかと思います。

# この記事で想定するケース
1. 会社のpcでGitをインストールしてリモートリポジトリにpushし、
2. 自宅pcでローカルリポジトリにリモートリポジトリのクローンを取得した後に変更を加えてリモートへpush、
3. 会社のpcで自宅pcの変更を受け取る。

と、いうところまでの最低限の内容になります。


#1-0 会社のpcでの操作

##1-1 GitHubの登録
https://github.com/ にアクセスしてサインインする

##1-2 Git for windows のインストール
https://gitforwindows.org/ にアクセスし、OSにマッチしたセットアップファイルをダウンロードしてインストールする。
![2020-05-24_16h52_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342467/b68810e9-2574-6adb-97b2-4713fd6b81a2.png)

##1-3 差分の確認




##1-3 GitBashでコマンドラインでの操作
Git for windows をインストールすると自動的にGitBashというターミナルアプリケーションがインストールされるので開きます。
こGitの操作はGitbashで行っていきます。
GitbashではWindowsのコマンドは使えなくなり、Unixライクなコマンドになるので注意です。

> (win)chdir > (gitbash)cd
> (win)rmdir > (gitbash)rm 
> (win)cd > (gitbash)pwd 
> (win)dir > (gitbash)ls

##1-4 Gitバージョン確認

```powershell
$ git --version
$ git version 2.25.1.windows.1
```

##1-5 Gitの初期設定

```powershell
# コミットする時の名前。チーム開発の場合は他者がわかる名前を使用しよう
$ git config --global user.name "YOUR NAME"
```

```powershell
# メールアドレスの設定
$ git config --global user.email YOUR MAILADDRESS
```


```powershell
# vscodeを使用するエディタとして設定。waitオプションを何故つけるかはググろう。とりあえずみんなつけてるからつける。
# 他のエディタを使用する場合はその設定をする。
$ git config --global core.editor 'code --wait'
```

```powershell
$ git config user.name #ユーザ名の確認
$ git config user.email #Email設定の確認
$ git config core.editor #使用エディタの確認
"C:\Users\user\AppData\Local\Programs\Microsoft VS Code\Code.exe" --wait
```


##1-6 Gitのローカルリポジトリを作成する

```powershell
$ mkdir myportfolio #ローカルリポジトリとなるフォルダを新規作成する。
$ cd myportfolio #そのフォルダに移動する
```

```powershell
$ git init #ローカルリポジトリとしてこのフォルダを設定する。
Initialized empty Git repository in C:/Users/user/myportfolio/.git/
# ↑これが表示されたらおk
```

```powershell
# initコマンドにより.gitという隠しフォルダが作成される。下記はその中身。
$ ls .git
config  description  HEAD  hooks/  info/  objects/  refs/
```

##1-7 ローカルリポジトリにaddしてコミットする 

### git add
```powershell
$ git add ファイル名   #ファイル単位のadd
$ git add .   #カレントディレクトリ配下のファイル全部add
```
複数ファイルのaddには他にも`-A`、`-u`があります。
>（公式ドキュメント） https://git-scm.com/docs/git-add

### git commit

```powershell
$ git commit -m "my first commit from my home"
[master (root-commit) c50ff18] my first commit from my home
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt
```

mオプションを省略すると、紐づいたエディタが起動して`COMMIT_EDITMSG`が開きます。
最上行にコミットメッセージを入力して保存して閉じます。
![2020-05-26_00h27_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342467/ea36f316-535d-d6c4-bd48-3ce5da53b323.png)


##1-8 Gitリモートリポジトリを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342467/4ea26bd3-0f4d-2dc2-bb37-eab0f922e9cf.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342467/7018c8f1-82e3-ae1f-2146-71d0d3b44073.png)
リポジトリ名を入力し、PrivateにしてCreateします。
Initialize …readmeのチェックは外しましょう。チェックを入れるreadmeファイルが作成されてしまい、いきなりリモートとローカルの差がでて面倒になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342467/1f37a810-0084-65d5-d846-c936c3722cfa.png)
赤枠①がリモートリポジトリのURLです。②のコマンドを実行するのでコマンドを1つずつコピーして実行していきます。

##1-9 リモートリポジトリにpushする
先ほど作成したリモートリポジトリにローカルリポジトリのファイルを追加します。

### git remote add origin
pushする際にリモートリポジトリURLを使用しますが、URLは長いのｴｲﾘｱｽを設定します。
ｴｲﾘｱｽ名として"origin"とすることが一般的なようです。


```powershell
git remote add origin [リモートリポジトリURL]
```

リモートリポジトリにデフォルトではreadmeが作成される。
### git pull origin master

```powershell
git pull origin master
```

### git push origin master
```powershell
git remote add origin [リモートリポジトリURL]
```


#2-0 自宅pcでの操作
この項は自宅pcで操作した内容です。自宅PCで上記1-2から1-5までを実行する。

##2-1 リモートリポジトリURLの取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342467/6eadb2a7-2b84-b225-88a3-ed28bf69a3db.png)

先ほど作成したリモートリポジトリを開き、clone or downloadをクリックし、表示されたURLをコピーする。

##2-2 Cloneの作成
initの代わりにcloneコマンドを使用します。管理するディレクトリにcdし、クローンコマンドを実行します。

```powershell
$ git clone [リモートリポジトリのURL]
```
カレントディレクトリ配下にディレクトリが作成されるのでlsで確認する。

##2-3 変更してaddしてcommitしてpush。
試しにpublicというディレクトリ配下にindex.htmlを作成したので、それをpushする。

```powershell
$ git add public/index.html
$ git commit -m "first change from mobile pc"
[master 320bd13] first change from mobile pc
 1 file changed, 1 insertion(+)
$ git push orijin master
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 377 bytes | 377.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/JojiOkawa/myportfolio.git
   67c855a..320bd13  master -> master
```


#3-0 会社PCで変更ファイルを受け取る
この項では会社PCでリモートPCが変更した差分ファイルを受け取ります。


##3-1 git pull origin master
他の人（pc）の変更を、受け取るには`fetch`か`pull`で受け取ります。
本来はfetchしてmergeすることが一般的というか安全なようですが、今回は一人での作業ですので`pull`（fetchしてmergeをいっぺんに実行するコマンド）を使おうと思います。

```powershell
# 変更を受け取る
$ git pull origin master
```

##3-2 差分を確認する
差分を受け取ることができたので確認してみましょう！

##3-3 おわり
以上です。

# error
- fatal: remote origin already exists.
    - git remote origin [url]しようとしたときにすでに存在するといわれた。
    - git remote remove originして削除したらおｋでした。
 

# よく使うコマンド

```bash
# リモートリポジトリのURLを確認する。
$ git remote -v

$ git status
# addしたのかcommitしたのか忘れたときに表示する。
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean


git log

git diff
add前の差分

git diff --cached
add済の差分

git log --oneline

git log

git branch
#現在自分が作業しているブランチを表示する。

git branch testbranch
#新規ブランチ"testbranch"を作成する。

git checkout testbranch
ブランチtestbranchに移動する。

git checkout -b emptybranch
新規ブランチを作成しつつ、そのブランチに移動する。

git merge testbranch
指定のブランチをマスターにマージする。

git branch ―d testbranch
#"testbranch"を削除する。


```