Git


#Gitで取り消しコマンド一覧
|やりたいこと|コマンド|
|--|--|
|ファイルを変更したけど取り消したい|git checkout ファイル名 or フォルダ名 or パス|
|git addしたけど取り消したい|git reset or git reset HEAD|
|git add, git commitしたけどコミットメッセージ間違えた|git commit --amend<br>--amendの後は何もつけない<br>コミットメッセージを編集できる画面になる|
|git add, git commitしたけどgit commitを取り消したい|git reset --soft|
|git add, git commitしたけど両方取り消したい|git reset --mixed|
|⭐️特定のcommitまで戻りたい|git reset 番号（git logから確認）|

pushしたかしていないかは後で考える

HEAD　＝今作業しているブランチ
soft＝HEADだけ元に戻す＝コミットだけ消える
mixed＝HEADとインデックスを元に戻す
hard＝HEAD、インデックス、作業ブランチを全部元に戻す

参考
https://qiita.com/forest1/items/f7c821565a7a7d64d60f

ステージングエリア＝インデックス

#Git diff系コマンド一覧
|やりたいこと|コマンド|
|--|--|
|作業ディレクトリとインデックスの差|git diff|
|インデックスと最新コミットの差|git diff --cached|
|作業ディレクトリと最新コミットの差|git diff HEAD|
|stashとの差分を確認|git diff stash@{番号}|


#Git stash系コマンド一覧
|やりたいこと|コマンド|
|--|--|
|名前をつけて変更を保存|git stash save 名前|
|退避させた変更一覧表示|git stash list|
|変更を取り込む|git stash apply|
|⭐️変更を取り込み消す|git stash pop|
|⭐️退避している最新の変更を消す|git stash drop|
|退避している全部の変更を消す|git stash clear|

#Git revert系コマンド一覧
|やりたいこと|コマンド|
|--|--|
|⭐️pushしたcommitを打ち消すcommitを作る|git revert 番号 <br>git logで調べる<br>revertしたらpushする|
|revertをrevertする|git revert revertの番号|
|merge commitをrevert|git revert -m 1 番号|

#branchの名前を変更したい

```
git branch -m <古いブランチ名> <新しいブランチ名>
```


#コンフリクトが起きたら
developブランチに移動して、developを最新にして、
それを作業していたブランチにマージする

```
git checkout develop
git pull origin develop
git checkout もといたブランチ名
git merge develop
```
でコンフリクトしたファイルをlocalに表示できる
git pull origin developではなくgit merge develop
→
22/2/8
これはdevelopブランチでgit pull origin developをしてから対象のブランチでそのローカルのdevelopブランチをgit merge developで取り込んでいるはず！

#載せてはいけないものをpushしてしまったので<br>pushした内容を上書きしたい

git reset HEAD^
git push -f origin ブランチ名

#エラー
###git initでhintが大量に出現
hintが言っているようにデフォルトのブランチ名を設定する
masterに

```
git config --global init.defaultBranch master
cat .gitconfig //ファイルの内容を確認
rm -r .git
git init
```
参考
https://zenn.dev/siba/articles/0c4c3510ddbc7d

#その他

##git initは何をしているか

|用語|意味|
|--|--|
|ディレクトリ|ディスク内の階層構造|
|リポジトリ|履歴管理をする仕組み<br>ディレクトリになっている場合もあり|
参考
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12233405462

リポジトリ（.git）を新規に作成している
この中で差分が管理され、ファイルの変更を記録することが出来るようになる

#上流ブランチ（Upstream branch）とは
あるローカルブランチが履歴を追跡するように設定したリモートブランチのこと
初めてブランチをpushするときは-uオプションを付けることが推奨
こうすることでpush先のリモートブランチがpush成功した際に上流ブランチとして設定される
通常はoriginのmasterブランチとして設定
###上流ブランチを設定するメリット

```
git push 
git pull
```
だけで

```
git push origin master
git pull origin master
```
と同じ意味になるので楽

参考
https://www-creators.com/archives/4931

#.gitignoreファイルに追加したのにignoreされない
既にgitで管理されているファイル（既にgit addやgit commitしたファイル）の場合は

```
git rm -r --cached . //ファイル全体キャッシュ削除
git rm -r --cached パス
```

としてgitの管理から外す

#新しくアプリを作ったときの手順

- 必要であればサブモジュール化する

Railsはアプリ作成後に作られるがNuxtは手動で行う

```
git init
```

管理しているファイルを確認する

```
git ls-files
```

.gitmodulesファイルを作成してpath（apiやfrontと記述する）とurl（GitHubのSSHの部分を後でコピーする）
を設定する

```
[submodule "api"]
  path = api
  url = GitHubのSSHのパス
[submodule "front"]
  path = front
  url = GitHubのSSHのパス
```


- SSH接続しているのであれば飛ばす

- リポジトリを作成する
+ボタンから
- プロジェクトを作成する
複数のリポジトリを管理したい場合はプロジェクトをアイコンのyour projectから作成する
- コマンド操作

```
git remote add origin GitHubのSSHに書かれたパス
git remote -v　で確認
git push　するとエラーなので表示されるコマンド↓を打つ
git push --set-upstream origin master
```

複数リポジトリを管理するプロジェクトがある場合は.gitmodulesのurlにGitHubのSSHに書かれたパスを記述して上記のコマンドを実行する

#間違えて他のブランチで作業してcommitしてしまったものを本来のブランチに取り込む

```
git cherry-pick 番号（git logで確認できる）
```